R 数据帧中的条件引用计算

R 数据帧中的条件引用计算,r,dataframe,R,Dataframe,考虑到下面的数据帧(2列:id和val),我试图找到一种快速的方法来计算元素“boo”在惟一事件中从val列中的出现率。 事件在列id中表示。独特的事件是:a、b、c、d id<-c("a","a","a","a","b","b","c","c","c","d") val<-c("boo","sd","ssd","df","boo","ksdj","boo","sdjhf","df","boo") x<-data.frame(id,val) 例2 id<-c("a","

考虑到下面的数据帧(2列:id和val),我试图找到一种快速的方法来计算元素“boo”在惟一事件中从val列中的出现率。 事件在列id中表示。独特的事件是:a、b、c、d

id<-c("a","a","a","a","b","b","c","c","c","d")
val<-c("boo","sd","ssd","df","boo","ksdj","boo","sdjhf","df","boo")
x<-data.frame(id,val)
例2

id<-c("a","a","a","a","b","b","c","c","c","d")
val<-c("boo","sd","ssd","df","boo","ksdj","boo","sdjhf","boo","sgfsc")
x<-data.frame(id,val)

Count("boo") =3
id试试这个:

> result <- ddply(x,~val,nrow)
> result <- result[result$V1==4, ]
> result
  val V1
1 boo  4
如果要查找以特定频率出现的
val
,可以将
result
子集如下:

> result[result >= 4]
boo
  4

对于使用基数R的
boo
的唯一计数,可以

sum(with(x, tapply(val, id, function(x) any(x == "boo"))))
## [1] 4
#1。子集唯一行

我还需要用R-base的功能解决这个问题(R集成度差),你能使用
plyr
软件包吗?如果没有,那么我将删除我的答案,你可以使用@User7598的回答;我建议你为其他人保留答案如果你在某一组中有两次
boo
?换句话说,
sum(使用(x,tapply(val,id,函数x)any(x==“boo”))
对你有用吗?太好了!不幸的是,我不能使用plyr包(或其他包),因为我正在处理一个糟糕的R集成;一切都需要用R-base来完成;I@agatha只需制作一个表并计算
TRUE
s
sum(使用(x,table(id,val='boo'))[,'TRUE'])
就可以给我提供
[1]4
,但如果能在一个命令中显示每个
id
发生的所有
val
,那就太好了。什么?因此,不要通过
[,'TRUE']
将表子集化?我要的只是伯爵
> result[result >= 4]
boo
  4
sum(with(x, tapply(val, id, function(x) any(x == "boo"))))
## [1] 4
# 1. subset unique rows
unique <- unique(x)

# 2. count unique rows with val == boo
sum(unique$val == "boo")