首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >R:只从dataframe中提取唯一的条目

R:只从dataframe中提取唯一的条目
EN

Stack Overflow用户
提问于 2013-12-12 12:57:26
回答 4查看 102关注 0票数 0

我只希望在数据帧中只提取发生的条目,确切地说是一次。例如:

DataFrame1 Col1 Col2 ABC 5 DEF 6 DEF 7 HIJ 8

我只想拉:

DataFrame2 ABC HIJ

其中唯一性仅由Col1确定。

有什么想法吗?

谢谢!

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2013-12-12 13:28:51

这有点麻烦,但这是可行的:

代码语言:javascript
代码运行次数:0
运行
复制
x <- table(DataFrame1[, 1]) == 1
DataFrame2 <- na.omit(data.frame(ifelse(x, names(x),NA)))

或者更优雅地使用sql:

代码语言:javascript
代码运行次数:0
运行
复制
library(sqldf)

DataFrame2 <- sqldf('select Col1 from DataFrame1 group by Col1 having count(Col1) = 1')
票数 1
EN

Stack Overflow用户

发布于 2013-12-12 15:35:12

您可以使用ave创建一个col1值和子集计数的向量,其基础是:

代码语言:javascript
代码运行次数:0
运行
复制
mydf[with(mydf, ave(Col1, Col1, FUN = length)) == "1", ]
#   Col1 Col2
# 1  ABC    5
# 4  HIJ    8

或者,类似地,使用"data.table":

代码语言:javascript
代码运行次数:0
运行
复制
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

如果您运行两次,从每个方向运行一次,复制也有效:

代码语言:javascript
代码运行次数:0
运行
复制
mydf[!(duplicated(mydf$Col1) | duplicated(mydf$Col1, fromLast=TRUE)), ]
#   Col1 Col2
# 1  ABC    5
# 4  HIJ    8
票数 1
EN

Stack Overflow用户

发布于 2013-12-12 13:06:20

unique帮助页面中,有一个对duplicate的引用可以帮助您(尽管我还没有测试):

代码语言:javascript
代码运行次数:0
运行
复制
dup <- duplicate(DataFrame1$Col1)
DataFrame2 <- DataFrame1[!dup]

或有子集

代码语言:javascript
代码运行次数:0
运行
复制
DataFrame2 <- subset(DataFrame1, subset=!dup)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20544228

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档