问题描述
我正在处理一个输出数据帧的函数,该数据帧当前会在缺少数据的情况下忽略试验。但是,我希望将全部试用计数重新添加到文件中,并且对于这些实例,其他数据列为空白(反映丢失的数据)。
示例数据框:
Df1withTrialCount <- data.frame(Participant = c('A','A','A' ),Trial = c(1,1,2,3,4,5,6,7,8,9,10,10),NotRelevantvariable = c(1,5))
Df2NeedsTrialsAddedIn <- data.frame(Participant = c('A','A'),EyeGaze = c(.4,.2.,.2,.1,.1))
因此,我最终得到的结果是,在没有数据的情况下,第1-10个试验各有一行,但在Eye Gaze中为空白(例如,第2个试验的EyeGaze为空白,第3个试验为0.2)。
任何帮助或见解将不胜感激。
保重,感谢您的宝贵时间, 卡罗琳
解决方法
我们可以使用complete
library(tidyr)
complete(Df2NeedsTrialsAddedIn,Participant,Trial = seq_len(max(Df1withTrialCount$Trial)))
-输出
# A tibble: 10 x 3
# Participant Trial EyeGaze
# <chr> <dbl> <dbl>
# 1 A 1 0.4
# 2 A 2 NA
# 3 A 3 0.2
# 4 A 4 NA
# 5 A 5 0.2
# 6 A 6 0.1
# 7 A 7 NA
# 8 A 8 NA
# 9 A 9 NA
#10 A 10 0.1
如果我们需要第一个数据集中的min
和`max
complete(Df2NeedsTrialsAddedIn,Trial = seq(min(Df1withTrialCount$Trial),max(Df1withTrialCount$Trial),by = 1))
,
使用base::merge
:
merge(unique(Df1withTrialCount[,c("Participant","Trial")]),Df2NeedsTrialsAddedIn,all.x = TRUE)
,
library(tidyverse)
Df1withTrialCount %>%
left_join(Df2NeedsTrialsAddedIn,by=c('Participant','Trial')) %>%
distinct(Trial,.keep_all = TRUE)