假设我有以下数据。
A <- c(4,4,4,4)
B <- c(1,2,3,4)
C <- c(1,2,4,4)
D <- c(3,2,4,1)
data <- as.data.frame(rbind(A,B,C,D))
data <- t(data)
data <- as.data.frame(data)
> data
A B C D
V1 4 1 1 3
V2 4 2 2 2
V3 4 3 4 4
V4 4 4 4 1
我希望在底部添加2行 。我尝试了rbind(数据,colSums(数据)),但是它给了我一个错误,而我找不到简单添加一行的东西。
添加的第一行需要是每列中前3行的总和。 第二个添加的行必须是每列中所有4行的总和。
所以输出应该如下所示:
> data
A B C D
V1 4 1 1 3
V2 4 2 2 2
V3 4 3 4 4
V4 4 4 4 1
V1:V3Sum 12 6 7 9
V1:V4Sum 16 10 11 10
如果你想采取刺,我然后尝试获得相对频率,所以再增加5行。
列中的每个值(V1:V4)除以v1:v5Sum值(4行)。然后第5行将是v1:v3Sum除以v1:v5Sum。
> data
A B C D
V1 4 1 1 3
V2 4 2 2 2
V3 4 3 4 4
V4 4 4 4 1
V1:V3Sum 12 6 7 9
V1:V4Sum 16 10 11 10
relFreqV1 .25 .1 .09 .3 *each of these 4 rows is the value in
relFreqV2 .25 .2 .18 .2 row 1:4 divided by v1:v4Sum
relFreqV3 .25 .3 .36 .4
relFreqV4 .25 .4 .36 .1
relFreqTot .75 .6 .63 .9 * last row is v1:v3Sum divided by
V1:V4Sum
任何帮助总是受到赞赏!!!
答案 0 :(得分:3)
你可以通过以下几种方式实现这一目标,包括一些更新,更整洁的方式,但是当基础R中的解决方案很简单时,我更喜欢这样的方法:
rbind(data, colSums(data[1:3,]),colSums(data))
A B C D V1 4 1 1 3 V2 4 2 2 2 V3 4 3 4 4 V4 4 4 4 1 5 12 6 7 9 6 16 10 11 10
如果您希望行名称与您想要的输出示例匹配,那么这是1个选项:
data <- rbind(data, colSums(data[1:3,]),colSums(data))
rownames(data) <- c("V1", "V2", "V3", "V4", "V1:V3Sum", "V1:V4Sum")
A B C D V1 4 1 1 3 V2 4 2 2 2 V3 4 3 4 4 V4 4 4 4 1 V1:V3Sum 12 6 7 9 V1:V4Sum 16 10 11 10
相对频率
您还需要更多行来反映摘要统计信息(相对频率)。我相信这就是你想要的:
rbind(data,
data[1,]/data[5,],
data[2,]/data[5,],
data[3,]/data[5,],
data[4,]/data[5,],
data[5,]/data[6,])
A B C D V1 4.0000000 1.0000000 1.0000000 3.0000000 V2 4.0000000 2.0000000 2.0000000 2.0000000 V3 4.0000000 3.0000000 4.0000000 4.0000000 V4 4.0000000 4.0000000 4.0000000 1.0000000 V1:V3Sum 12.0000000 6.0000000 7.0000000 9.0000000 V1:V4Sum 16.0000000 10.0000000 11.0000000 10.0000000 V11 0.3333333 0.1666667 0.1428571 0.3333333 V21 0.3333333 0.3333333 0.2857143 0.2222222 V31 0.3333333 0.5000000 0.5714286 0.4444444 V41 0.3333333 0.6666667 0.5714286 0.1111111 V1:V3Sum1 0.7500000 0.6000000 0.6363636 0.9000000