我有类似的数据(尽管数据集更大):
correct.trial1 RT.trial1 correct.trial2 RT.trial2 correct.trial3 RT.trial3
1 1 473 0 337 1 426
2 1 496 1 407 1 421
3 1 368 0 405 1 470
4 0 333 1 475 0 473
5 0 435 0 312 1 402
我们可以用这个来制作这个样本:
set.seed(12)
df <- data.frame(correct.trial1 = sample(0:1, 5, replace=T),
RT.trial1 = sample(300:500, 5, replace=T),
correct.trial2 = sample(0:1, 5, replace=T),
RT.trial2 = sample(300:500, 5, replace=T),
correct.trial3 = sample(0:1, 5, replace=T),
RT.trial3 = sample(300:500, 5, replace=T))
我想starts_with("RT.trial")
用NA
相邻(左)列starts_with("correct.trial")
的值为 0 时替换值。当然,我可以一次做一个,例如:
library(dplyr)
df %>%
mutate(RT.trial1 = ifelse(correct.trial1==1, RT.trial1, NA),
RT.trial2 = ifelse(correct.trial2==1, RT.trial2, NA),
RT.trial3 = ifelse(correct.trial3==1, RT.trial3, NA))
所以它看起来像这样:
correct.trial1 RT.trial1 correct.trial2 RT.trial2 correct.trial3 RT.trial3
1 1 473 0 NA 1 426
2 1 496 1 407 1 421
3 1 368 0 NA 1 470
4 0 NA 1 475 0 NA
5 0 NA 0 NA 1 402
但这对于成千上万的列是不切实际的。
问题
如何同时对所有列执行此操作?(注意:我更喜欢一个dplyr
解决方案,并且 usingacross
比 using 更可取mutate_at
。)
试图
不确定,但根据这个相关的帖子,它(可能)看起来像这样:
df %>%
mutate_at(vars(starts_with("RT.trial")),
~ifelse(vars(starts_with("correct.trial"))==0, NA, .x))