有一个类似的问题适用于PHP,但我正在使用R并且无法将解决方案翻译成我的问题。
我有一个数据帧,它有10行和50列,其中一些行是完全相同的。如果对其使用unique,则每个“类型”只得到一行,但我想要的实际上是仅获取出现一次的行。有谁知道如何实现这一点吗?
我可以查看聚类和热图来手动排序,但我有比上面提到的更大的数据框(最多100行),这会变得有点棘手。
有一个类似的问题适用于PHP,但我正在使用R并且无法将解决方案翻译成我的问题。
我有一个数据帧,它有10行和50列,其中一些行是完全相同的。如果对其使用unique,则每个“类型”只得到一行,但我想要的实际上是仅获取出现一次的行。有谁知道如何实现这一点吗?
我可以查看聚类和热图来手动排序,但我有比上面提到的更大的数据框(最多100行),这会变得有点棘手。
df
):
这将提取仅出现一次的行(假设您的数据框命名为 df
):
df[!(duplicated(df) | duplicated(df, fromLast = TRUE)), ]
工作原理:函数duplicated
测试一行是否至少从第一行开始出现第二次。如果使用参数fromLast = TRUE
,则函数会从最后一行开始。
两个布尔结果使用|
(逻辑或)组合成一个新向量,表示所有出现多次的行。然后使用!
取反该结果,从而创建一个布尔向量,表示仅出现一次的行。
一个涉及到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)
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)), ]