将列总数添加到数据框 R 中的新行
add column total to new row in data frame R
假设我有以下数据。
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(data,colSums(data)) 但它给了我一个错误,我很难找到可以简单地添加一行的东西。
添加的第一行需要是每一列中前三行的总和。
添加的第二行需要是每列中所有 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 行。
1 行表示列 (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
我们将不胜感激!!!
您可以通过多种方式完成此操作,包括一些更新和更多的方式 "tidy",但是当解决方案在基础 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
假设我有以下数据。
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(data,colSums(data)) 但它给了我一个错误,我很难找到可以简单地添加一行的东西。
添加的第一行需要是每一列中前三行的总和。 添加的第二行需要是每列中所有 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 行。
1 行表示列 (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
我们将不胜感激!!!
您可以通过多种方式完成此操作,包括一些更新和更多的方式 "tidy",但是当解决方案在基础 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