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