我的数据如下
test=data.frame("name"=c("A","A","A","A","B","B","C"), value=c(10,11,12,13,14,15,16))
我希望根据非重复名称" C"对测试数据进行子集化,我想显示以下数据:
name value
c 16
我尝试test[table(test$name)>1,]
,但输出错误。
请给我一些提示,谢谢!!
答案 0 :(得分:4)
我们可以使用data.table
。将'data.frame'转换为'data.table'(setDT(test)
),按'name'分组,if
行数等于1(.N==1
),子集data.table。
library(data.table)
setDT(test)[, if(.N==1) .SD, by = name]
# name value
#1: C 16
答案 1 :(得分:2)
我们可以在ave
中尝试base R
功能,只选择length = 1
test[ave(test$value, test$name, FUN = function(x) length(x)) == 1, ]
# name value
#7 C 16
或dplyr
library(dplyr)
test %>%
group_by(name) %>%
filter(n() == 1)
# name value
# <fctr> <dbl>
#1 C 16
答案 2 :(得分:2)
使用data.frame
,
table.freq <- as.data.frame(table(test$name))
test[test$name %in% table.freq$Var1[table.freq$Freq==1],]
# name value
#7 C 16
或使用which
test[test$name %in% names(which(table(test$name)==1)),]
# name value
#7 C 16
答案 3 :(得分:2)
这是data.frame
的替代代码:
test <-
data.frame(
name = c("A", "A", "A", "A", "B", "B", "C", "D"),
value = c(10, 11, 12, 13, 14, 15, 16, 17)
)
test[test$name == unique(test$name)[table(test$name) == 1], ]
# Answer:
# name value
# 7 C 16
# 8 D 17
或者:
test[test$name == names(table(test$name))[table(test$name) == 1], ]