这看起来应该很容易,但我无法弄清楚。我想总结我的矩阵中具有相同名称的所有列。因此,在下面的示例中,我想最终得到另一个只有三列的矩阵。
set.seed(4)
z<-matrix(sample(1:10,20, replace=T), nrow=4)
colnames(z)<-c("a","c","b","a","b")
z
a c b a b
[1,] 6 9 10 2 10
[2,] 1 3 1 10 6
[3,] 3 8 8 5 10
[4,] 3 10 3 5 8
应该产生:
a c b
[1,] 8 9 20
[2,] 11 3 7
[3,] 8 8 18
[4,] 8 10 11
我试过了:
z<-aggregate(colnames(z), data=z, sum)
但它不起作用。如果可能的话,我宁愿使用基数R.
答案 0 :(得分:7)
您可以使用android:state_selected="true"
将列名称设为rowsum
变量:
group
答案 1 :(得分:2)
试试这个:
sapply(unique(colnames(z)), function(x) rowSums(z[, colnames(z)==x, drop=FALSE]))
答案 2 :(得分:1)
以下是使用xtabs
library(reshape2)
xtabs(value~Var1 +Var2, melt(z))
# Var2
#Var1 a c b
# 1 8 9 20
# 2 11 3 7
# 3 8 8 18
# 4 8 10 11
或tapply
tapply(z, list(row(z), colnames(z)[col(z)]), FUN = sum)
# a b c
# 1 8 20 9
# 2 11 7 3
#3 8 18 8
#4 8 11 10
答案 3 :(得分:0)
这也可以。
set.seed(4)
z<-matrix(sample(1:10,20, replace=T), nrow=4)
colnames(z)<-c("a","c","b","a","b")
z <- as.data.table(z)
z[,id:=.I]
z <- melt(z,id.vars="id")
z[,sum:=sum(value),by=.(variable,id)]
z[,value:=NULL]
z <- dcast.data.table(z, id~variable,value.var = "sum", fun.aggregate = max)
z[,id:=NULL]
导致
a c b
1: 8 9 20
2: 11 3 7
3: 8 8 18
4: 8 10 11