插入行以反映缺失数据
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)
我正在开发一个输出数据框的函数,该函数当前省略了缺少数据的试验。但是,我希望将完整的试验计数添加回文件中,并且这些实例的其他数据列为空白(反映丢失的数据)。
示例数据帧:
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)