R-将值从单元格复制到同一列中的空单元格
我有一个数据集,里面有利克特量表的答案和反应时间,这都是实验操作的结果。理想情况下,我希望复制Likert_答案值,并将其与与该值相关的实验操作对齐 数据集如下所示: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
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