R-将值从单元格复制到同一列中的空单元格

R-将值从单元格复制到同一列中的空单元格,r,copy,cell,replicate,R,Copy,Cell,Replicate,我有一个数据集,里面有利克特量表的答案和反应时间,这都是实验操作的结果。理想情况下,我希望复制Likert_答案值,并将其与与该值相关的实验操作对齐 数据集如下所示: x <- rep(c(NA, round(runif(5, min=0, max=100), 2)), times=3) myDF <- data.frame(ID = rep(c(1,2,3), each=6), Condition = rep(c("A",&quo

我有一个数据集,里面有利克特量表的答案和反应时间,这都是实验操作的结果。理想情况下,我希望复制Likert_答案值,并将其与与该值相关的实验操作对齐

数据集如下所示:

x <- rep(c(NA, round(runif(5, min=0, max=100), 2)), times=3)

myDF <- data.frame(ID = rep(c(1,2,3), each=6),
               Condition = rep(c("A","B"), each=3, times=3),
               Type_of_Task = rep(c("Test", rep(c("Experiment"), times=2)), times=6),
               Likert_Answer = c(5, NA, NA, 6, NA, NA, 1, NA, NA, 5, NA, NA, 5, NA, NA, 1, NA, NA),
               Reaction_Times = x)
x%
填充(如回答,.direction=“up”)
在这种情况下,对于ID 1的条件B中的所有值,Likert_量表中本应为NA的值变成了5。你知道怎样才能避免这种情况吗


(如果代码不干净,请原谅:我对R很陌生,我正在努力学习……但我在这个阶段被这个问题困住了。)

如果我正确理解了你的问题,你就非常接近解决方案了。我操纵了演示df来展示分组是如何工作的:

library(dplyr)
library(tidyr)

myDF <- data.frame(ID = rep(c(1,2,3), each=6),
                   Condition = rep(c("A","B"), each=3, times=3),
                   Type_of_Task = rep(c("Test", rep(c("Experiment"), times=5)), times=3),
                   Likert_Answer = c(5, NA, NA, 6, NA, NA, 1, NA, NA, 5, NA, NA, NA, NA, NA, 1, NA, NA),
                   Reaction_Times = x)


myDF %>% 
  dplyr::group_by(ID) %>% 
  tidyr::fill(Likert_Answer)

      ID Condition Type_of_Task Likert_Answer Reaction_Times
   <dbl> <chr>     <chr>                <dbl>          <dbl>
 1     1 A         Test                     5           NA  
 2     1 A         Experiment               5           18.4
 3     1 A         Experiment               5           41.1
 4     1 B         Experiment               6           59.8
 5     1 B         Experiment               6           93.4
 6     1 B         Experiment               6           38.5
 7     2 A         Test                     1           NA  
 8     2 A         Experiment               1           18.4
 9     2 A         Experiment               1           41.1
10     2 B         Experiment               5           59.8
11     2 B         Experiment               5           93.4
12     2 B         Experiment               5           38.5
13     3 A         Test                    NA           NA  
14     3 A         Experiment              NA           18.4
15     3 A         Experiment              NA           41.1
16     3 B         Experiment               1           59.8
17     3 B         Experiment               1           93.4
18     3 B         Experiment               1           38.5
库(dplyr)
图书馆(tidyr)
多年筹资框架%
dplyr::分组依据(ID)%>%
tidyr::填充(Likert_答案)
ID任务的条件类型,如回答反应时间
1 A测试5 NA
2 1实验5 18.4
3 1实验5 41.1
4 1b实验6 59.8
5 1 B实验6 93.4
61B实验638.5
7.2测试1不适用
8 2实验1 18.4
9 2实验1 41.1
102 B实验5 59.8
11 2 B实验5 93.4
12 2 B实验5 38.5
13.3 A测试不适用
14.3实验NA 18.4
15.3实验NA 41.1
16 3 B实验1 59.8
17 3 B实验1 93.4
18 3 B实验138.5

通过您的回复,我才意识到我的代码中有错误,是为了解释我的问题!与条件B相对应的任务类型_中的第一个单元格应为“测试”,而不是“实验”。我会编辑并努力使自己清楚。对不起!我现在修改了代码并编辑了问题。我希望现在我的问题更清楚明白。基本上,我希望列中的值填充为相同的ID,但也填充为相同的条件。这样,例如,如果参与者ID1没有回答条件B的likert量表,则该结果仍然为NA,并且不会被条件a的测试结果填充。@Lucas:您必须使用两个变量进行分组:myDF_missing%%>%dplyr::group_by(ID,条件)%%>%tidyr::fill(likert_answer)
library(dplyr)
library(tidyr)

myDF2 <- myDF %>% 
  group_by(ID) %>% 
  fill(Likert_Answer) %>% 
  fill(Likert_Answer, .direction = "up")

myDF_missing <- myDF
myDF_missing[4,4] = NA

myDF3 <- myDF_missing %>% 
  group_by(ID) %>% 
  fill(Likert_Answer) %>% 
  fill(Likert_Answer, .direction = "up")
library(dplyr)
library(tidyr)

myDF <- data.frame(ID = rep(c(1,2,3), each=6),
                   Condition = rep(c("A","B"), each=3, times=3),
                   Type_of_Task = rep(c("Test", rep(c("Experiment"), times=5)), times=3),
                   Likert_Answer = c(5, NA, NA, 6, NA, NA, 1, NA, NA, 5, NA, NA, NA, NA, NA, 1, NA, NA),
                   Reaction_Times = x)


myDF %>% 
  dplyr::group_by(ID) %>% 
  tidyr::fill(Likert_Answer)

      ID Condition Type_of_Task Likert_Answer Reaction_Times
   <dbl> <chr>     <chr>                <dbl>          <dbl>
 1     1 A         Test                     5           NA  
 2     1 A         Experiment               5           18.4
 3     1 A         Experiment               5           41.1
 4     1 B         Experiment               6           59.8
 5     1 B         Experiment               6           93.4
 6     1 B         Experiment               6           38.5
 7     2 A         Test                     1           NA  
 8     2 A         Experiment               1           18.4
 9     2 A         Experiment               1           41.1
10     2 B         Experiment               5           59.8
11     2 B         Experiment               5           93.4
12     2 B         Experiment               5           38.5
13     3 A         Test                    NA           NA  
14     3 A         Experiment              NA           18.4
15     3 A         Experiment              NA           41.1
16     3 B         Experiment               1           59.8
17     3 B         Experiment               1           93.4
18     3 B         Experiment               1           38.5