我想否定(除了因子变量的每个级别的给定行值之外的所有值)并总结剩余的数据。举个简单的例子,我有一个带有两列的数据框DF。
~"044j"
如果dplyr可以选择否定(可以吗?),它会看起来像这样。
>DF
Category Value
A 5
B 2
C 3
A 1
C 1
答案 0 :(得分:5)
以下是您可以在基地R
中执行此操作的方式:
编辑:感谢您提出可扩展的更改@Ryan
> sapply(levels(DF$Category), FUN = function(x) mean(subset(DF, Category != x)$Value))
A B C
2.000000 2.500000 2.666667
答案 1 :(得分:2)
使用data.table
我们可以尝试:
library(data.table)
setDT(DF)[, DF[!Category %in% .BY[[1]], mean(Value)], by = Category]
# Category V1
#1: A 2.000000
#2: B 2.500000
#3: C 2.666667
答案 2 :(得分:0)
另一种方法是使用for循环:
DF<-data.frame(Category=c("A","B","C","A","C"),
Value=c(5,2,3,1,1))
DF2<-data.frame(Category=unique(DF$Category))
for(letter in unique(DF$Category)) {
DF3<-DF[DF$Category!=letter,]
DF2$avg[DF2$Category==letter]<-round(mean(DF3$Value),2)
}
DF2
Category avg
1 A 2.00
2 B 2.50
3 C 2.67