【问题标题】:How to add calculated row based on mulitple column and row values in r in?如何根据 r in 中的多个列和行值添加计算行?
【发布时间】:2019-03-01 21:36:38
【问题描述】:
如果我在下面有一个数据框,并且我想为 r 中的每个组添加另一行:
之前的数据框:
Letter Value
A 1
A 2
A 3
B 1
B 2
B 3
如果我只想为平均这些行的每个组添加另一行,我将如何处理:
之后的数据框:
Letter Value
A 1
A 2
A 3
A 2
B 1
B 2
B 3
B 2
【问题讨论】:
标签:
r
dplyr
calculated-columns
【解决方案1】:
一个基本的 R 解决方案可以是
do.call(rbind, lapply(split(df, df$Letter),
function(x) rbind(x, c(unique(x$Letter), mean(x$Value)))))
# Letter Value
#A.1 A 1
#A.2 A 2
#A.3 A 3
#A.4 A 2
#B.4 B 1
#B.5 B 2
#B.6 B 3
#B.41 B 2
这要求列 Letter 是 character 向量。如果Letter 是factor,您可以将factor 转换为character 向量
df$Letter <- as.character(df$Letter)
样本数据
df <- read.table(text =
"Letter Value
A 1
A 2
A 3
B 1
B 2
B 3", header = T, stringsAsFactors = FALSE)
【解决方案2】:
通过给ag的字母计算值的平均值,将其绑定到DF的末尾给DF2并排序。
ag <- aggregate(value ~ letter, DF, mean)
DF2 <- rbind(DF, ag)
o <- order(DF2$letter, rownames(DF2))
DF2[o, ]
给予:
letter value
1 A 1
2 A 2
3 A 3
7 A 2
4 B 1
5 B 2
6 B 3
8 B 2
注意
可重现形式的输入DF 是:
DF <- data.frame(letter = rep(c("A", "B"), each = 3), value = 1:3)