我想基于rownames组合/求和两行,在R中创建一行。最佳路径可能是创建一个新行并将两行相加。
示例df:
A 1 3 4 6
B 3 2 7 9
C 6 8 1 2
D 3 2 8 9
如果A,B,C,D是rownames,我想将两行(A& C)组合成一个得到:
A+C 7 11 5 8
B 3 2 7 9
D 3 2 8 9
谢谢。
答案 0 :(得分:8)
aggregate
救援:
aggregate(df, list(Group=replace(rownames(df),rownames(df) %in% c("A","C"), "A&C")), sum)
# Group V2 V3 V4 V5
#1 A&C 7 11 5 8
#2 B 3 2 7 9
#3 D 3 2 8 9
答案 1 :(得分:4)
您可以使用标准加法算术运算符替换A
行,然后使用逻辑语句删除C
行。
df["A", ] <- df["A", ] + df["C", ]
df[rownames(df) != "C", ]
# V2 V3 V4 V5
# A 7 11 5 8
# B 3 2 7 9
# D 3 2 8 9
对于两行以上,您可以使用colSums()
进行添加。这假定nm
中的第一个值是我们要替换/保留的值。
nm <- c("A", "C")
df[nm[1], ] <- colSums(df[nm, ])
df[!rownames(df) %in% nm[-1], ]
我会留给你更改行名称。 :)
数据:强>
df <- structure(list(V2 = c(1L, 3L, 6L, 3L), V3 = c(3L, 2L, 8L, 2L),
V4 = c(4L, 7L, 1L, 8L), V5 = c(6L, 9L, 2L, 9L)), .Names = c("V2",
"V3", "V4", "V5"), class = "data.frame", row.names = c("A", "B",
"C", "D"))
答案 2 :(得分:0)
矩阵乘法?
> A <- matrix(c(1,0,0,0,1,0,1,0,0,0,0,1), 3)
> A
[,1] [,2] [,3] [,4]
[1,] 1 0 1 0
[2,] 0 1 0 0
[3,] 0 0 0 1
> A %*% X
V2 V3 V4 V5
[1,] 7 11 5 8
[2,] 3 2 7 9
[3,] 3 2 8 9
或者使用Matrix
包用于稀疏矩阵:
fac2sparse(factor(c(1,2,1,4))) %*% X