31

PHP有一个类似的问题,但我正在使用 R 并且无法将解决方案翻译为我的问题。

我有这个包含 10 行和 50 列的数据框,其中一些行是完全相同的。如果我在它上面使用唯一的,我会得到一行 - 比如说 - “类型”,但我真正想要的是只得到那些只出现一次的行。有谁知道我怎么能做到这一点?

我可以查看集群和热图以手动对其进行排序,但我的数据框比上面提到的更大(最多 100 行),这有点棘手。

4

3 回答 3

78

这将提取仅出现一次的行(假设您的数据框名为df):

df[!(duplicated(df) | duplicated(df, fromLast = TRUE)), ]

它是如何工作的:该函数duplicated测试一行是否从第一行开始至少第二次出现。如果使用参数fromLast = TRUE,则函数从最后一行开始。

这两个布尔结果与|(逻辑“或”)组合成一个新向量,表示所有行出现多次。这个结果被否定,!从而创建一个布尔向量,指示只出现一次的线。

于 2012-12-07T12:40:54.467 回答
9

涉及的可能性dplyr可能是:

df %>%
 group_by_all() %>%
 filter(n() == 1)

或者:

df %>%
 group_by_all() %>%
 filter(!any(row_number() > 1))

由于dplyr 1.0.0,最好的方法是:

data %>%
    group_by(across(everything())) %>%
    filter(n() == 1)
于 2019-07-21T21:20:06.873 回答
1

尝试一下

library(dplyr)

DF1 <- data.frame(Part = c(1,2,3,4,5), Age = c(23,34,23,25,24),  B.P = c(87,76,75,75,78))

DF2 <- data.frame(Part =c(3,5), Age = c(23,24), B.P = c(75,78))

DF3 <- rbind(DF1,DF2)

DF3 <- DF3[!(duplicated(DF3) | duplicated(DF3, fromLast = TRUE)), ]
于 2020-03-20T13:08:16.273 回答