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

R - copy values from cells to empty cells within same columns

我有一个数据集,其中包含李克特量表和反应时间的答案,这些都是实验操作的结果。理想情况下,我想复制 Likert_Answer 值并将它们与与该值关联的实验操作对齐。

数据集如下所示:

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)

我发现很难表述我遇到的问题,所以我的预期输出应该是这样的:

myDF_Output <- 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 = rep(c(5, 6, 1, 5, 5, 1), each = 3),
               Reaction_Times = x)

我在this post看到一个可行的解决方案如下:

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")

在这种情况下,对于 ID 1 的条件 B 中的所有值,在 Likert_Scales 中本应为 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