插入行以反映缺失数据

Inserting rows to reflect missing data

我正在开发一个输出数据框的函数,该函数当前省略了缺少数据的试验。但是,我希望将完整的试验计数添加回文件中,并且这些实例的其他数据列为空白(反映丢失的数据)。

示例数据帧:

Df1withTrialCount <- data.frame(Participant = c('A', 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A' ), 
Trial = c(1,1,2,2,3,3,4,5,6,7,8,9,10,10,10),
NotRelevantVariable = c(1,2,3,4,5,6,4,3,2,1,1,2,3,4,5))

Df2NeedsTrialsAddedIn <- data.frame(Participant = c('A', 'A', 'A', 'A', 'A'), 
Trial = c(1,3,5,6,10),
EyeGaze = c(.4, .2., .2, .1, .1))

所以我最终得到的结果是试验 1-10 各有一行,但在没有数据时 Eye Gaze 为空白(例如,试验 2 的 EyeGaze 为空白,而试验 3 为 .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, Participant, 
        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)