R中xtabs()表内的数学运算

R中xtabs()表内的数学运算,r,R,如何将表中的两个因子级别相加?例如,在这种情况下,我想对versicolor+virginica求和 t1 <- xtabs(~Species, iris) > t1 # Species # setosa versicolor virginica # 50 50 50 t1 #种类 #维吉尼亚杂色刚毛 # 50 50 50 然后删除versicolor和virginica,

如何将表中的两个因子级别相加?例如,在这种情况下,我想对versicolor+virginica求和

t1 <- xtabs(~Species, iris)

> t1
# Species
#    setosa versicolor  virginica 
#        50         50         50 
t1
#种类
#维吉尼亚杂色刚毛
#        50         50         50 

然后删除versicolor和virginica,留下新级别的“sumV”及其值。

我们可以通过将“versicolor”和“virginica”更改为新值“sumV”来转换数据集,然后执行
xtabs

xtabs(~Species,transform(iris, Species= c('setosa', 
           'sumV')[(Species %in% c('versicolor', 'virginica'))+1L]))
#Species
#setosa   sumV 
#    50    100 
或者正如@Ananda Mahto所建议的,我们可以使用
替换
grep

xtabs(~ Species, transform(iris, Species = 
  replace(as.character(Species), grepl("^v", Species), "sumV")))
最后删除不希望保留的值:

t1[-c(2,3)]

#setosa   sumV 
#    50    100 

@南希:谢谢你的评论。我将真/假逻辑输出转换为
c(2,1)
,通过加1,使用该索引,我们可以将其更改为“setosa”和“sumV”@akrun,我明白了。为什么要使用+1L而不是+1?对布尔值加1不是做了同样的事情吗?@Nancy在这种情况下,没有多大区别
1L
是一个整数,因此如果我们在大型数据集上使用它,可能会有一些效率(尽管我总是通过实践使用它)在主题上的变化:
xtabs(~Species,transform(iris,Species=replace)(as.character(Species),grepl(^v,Species),“sumV”)
great solution@akrun!
t1["sumV"]  = t1["versicolor"] + t1["virginica"]

#    setosa versicolor  virginica       sumV
#        50         50         50        100 
t1[-c(2,3)]

#setosa   sumV 
#    50    100