如何在R中组合两行?

时间:2016-01-12 23:13:57

标签: r

我想基于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

谢谢。

3 个答案:

答案 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