我正在处理一项纵向调查的数据,其中包含了大量已实现的波浪。
在这个阶段,我正在检查每个后续波中有多少个新ID(用例)(即在wave2中与wave1、wave2与wave3、wave3与wave4等)。每个波都有自己的数据集.
我创建了一个代码,它可以很好地处理手动指定的波形。看起来是这样的:
# Create example data
wave1 <- data.frame(ID = c(1,2,3,4,5))
wave2 <- data.frame(ID = c(1,2,3,6,7))
wave3 <- data.frame(ID = c(1,2,3,6,8))
# In this step I'm taking out the IDs from the first wave
idwave1 <- as.vector(wave1$ID)
# In this step I exclude the non-unique IDs from the subsequent wave (wave2) so I can get the number of unique IDs
wave2unique <- wave2[! wave2$ID %in% idwave1, ]
# Now I apply the same procedure for the wave2 and wave3
idwave2 <- as.vector(wave2$ID)
wave3unique <- wave3[! wave3$ID %in% idwave2, ]但是,在这之后,我继续创建一些函数来自动完成所有的波形,因为我不知道如何处理每个波形都有一个不同的数据集的情况。
发布于 2017-08-08 21:10:30
如果您的数据位于一个表中(可能应该是这样).
library(data.table)
wDT = rbindlist(list(wave1, wave2, wave3), idcol = "wave")
wave ID
1: 1 1
2: 1 2
3: 1 3
4: 1 4
5: 1 5
6: 2 1
7: 2 2
8: 2 3
9: 2 6
10: 2 7
11: 3 1
12: 3 2
13: 3 3
14: 3 6
15: 3 8然后做一个反连接:
wDT[!.(wave + 1L, ID), on=.(wave, ID)]
wave ID
1: 1 1
2: 1 2
3: 1 3
4: 1 4
5: 1 5
6: 2 6
7: 2 7
8: 3 8对于dplyr,而不是data.table,有bind_rows (比如rbindlist)和anti_join (比如x[!i])。
发布于 2017-08-08 21:03:49
你在下面找什么东西吗?
wave_ls = list(wave1, wave2, wave3)
f = function(LIST) {
out = list()
for (i in 1:(length(LIST) - 1)) {
wave1 = LIST[[i]]
wave2 = LIST[[i + 1]]
out[[i]] = wave2[!wave2$ID %in% wave1$ID,]
names(out)[i] = paste0('wave', i+1, 'unique')
}
out
}
f(wave_ls)
$wave2unique
[1] 6 7
$wave3unique
[1] 8https://stackoverflow.com/questions/45577422
复制相似问题