我只希望在数据帧中只提取发生的条目,确切地说是一次。例如:
DataFrame1 Col1 Col2 ABC 5 DEF 6 DEF 7 HIJ 8
我只想拉:
DataFrame2 ABC HIJ
其中唯一性仅由Col1确定。
有什么想法吗?
谢谢!
发布于 2013-12-12 05:28:51
这有点麻烦,但这是可行的:
x <- table(DataFrame1[, 1]) == 1
DataFrame2 <- na.omit(data.frame(ifelse(x, names(x),NA)))
或者更优雅地使用sql:
library(sqldf)
DataFrame2 <- sqldf('select Col1 from DataFrame1 group by Col1 having count(Col1) = 1')
发布于 2013-12-12 07:35:12
您可以使用ave
创建一个col1
值和子集计数的向量,其基础是:
mydf[with(mydf, ave(Col1, Col1, FUN = length)) == "1", ]
# Col1 Col2
# 1 ABC 5
# 4 HIJ 8
或者,类似地,使用"data.table":
library(data.table)
DT <- data.table(mydf)
DT[, id := .N, by = Col1][id == 1]
# Col1 Col2 id
# 1: ABC 5 1
# 2: HIJ 8 1
如果您运行两次,从每个方向运行一次,复制也有效:
mydf[!(duplicated(mydf$Col1) | duplicated(mydf$Col1, fromLast=TRUE)), ]
# Col1 Col2
# 1 ABC 5
# 4 HIJ 8
发布于 2013-12-12 05:06:20
在unique
帮助页面中,有一个对duplicate
的引用可以帮助您(尽管我还没有测试):
dup <- duplicate(DataFrame1$Col1)
DataFrame2 <- DataFrame1[!dup]
或有子集
DataFrame2 <- subset(DataFrame1, subset=!dup)
https://stackoverflow.com/questions/20544228
复制