【发布时间】:2021-03-03 04:21:35
【问题描述】:
我有一个数据集,其中包含李克特量表和反应时间的答案,这些都是实验操作的结果。理想情况下,我想复制 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 很陌生,而且我正在努力学习......但在这个阶段我被这个问题困住了。)
【问题讨论】: