我有一个数据框,其中包含2组患者(组x和组y)的血液结果。每个队列中有相同数量的患者(具有不同的id号)(2000)。由于我对时间感兴趣,它们在测试时已经(模糊)加入。由于测试时间有很多匹配,这导致两个组中的ID重复,其中时间相似。
这是一个例子:
id.x time value id.y time value
1 23 4.1 11 18 4.3
1 23 4.1 12 25 4.8
2 54 3.9 13 51 4.3
2 54 3.9 14 52 4.0
3 72 4.5 14 70 4.3
3 72 4.5 15 25 4.3
x和y组中的id值比例为1:1。
我试图找到唯一的对,在任何一列中都没有重复id。我试过了
test.df %>% distinct(id.x, .keep_all = TRUE)
这一半工作 - 我从id.x获得唯一值,但它们与重复的id.y值匹配,因为我没有指定这些值也必须是唯一的。
我也试过了
testsample.df <- unique(test.df[,c('icustay_id.x', 'icustay_id.y')])
这导致唯一对,即每对不重复,但每个id以所有可能的组合重复多次。
我不确定这是否可行。
我最接近的是一个2阶段的过程 - 使用随机唯一id.y进行子采样,然后使用以下内容对唯一的id.x进行二次采样:
subsampled_data <- ddply(test.df,.(test.df$id.y), function(x)
{x[sample(nrow(x),size=1),]})
subsampled_data2.df <- ddply(subsampled_data,.(subsampled_data$icustay_id.x),
function(x) {x[sample(nrow(x),size=1),]})
这样做,我成功结束了只有唯一ID的唯一对。然而,从2000年到1000年,我失去了不少行。
是否有可能找到具有独特ID的独特对,而不会在每一步都失去这么多?
谢谢!
我不确定你的预期产量是多少。但希望这会有所帮助。
样本数据:
df <- data.frame(id.x = c(1,1,2,2,3,3), id.y = c(11,12,13,13,13,13))
id.x
的独特价值:
df <- df[!duplicated(df$id.x), ]
id.x id.y
1 1 11
3 2 13
5 3 13
现在我们仍然在id.y
有重复,并做
df <- df[!duplicated(df$id.y), ]
删除它们。
这导致:
id.x id.y
1 1 11
3 2 13
或者与dplyr
:
df %>% distinct(id.x, .keep_all = TRUE) %>% distinct(id.y, .keep_all = TRUE)
收益:
id.x id.y
1 1 11
2 2 13