插入行以反映丢失的数据

问题描述

我正在处理一个输出数据帧的函数,该数据帧当前会在缺少数据的情况下忽略试验。但是,我希望将全部试用计数重新添加文件中,并且对于这些实例,其他数据列为空白(反映丢失的数据)。

示例数据框:

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)