在R中查找唯一对(不重复任何值)

问题描述 投票:0回答:1

我有一个数据框,其中包含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。

Attempts so far

我试图找到唯一的对,在任何一列中都没有重复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的独特对,而不会在每一步都失去这么多?

谢谢!

r unique data-cleaning
1个回答
1
投票

我不确定你的预期产量是多少。但希望这会有所帮助。

样本数据:

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
© www.soinside.com 2019 - 2024. All rights reserved.