如果下面有一个数据框,我想为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
答案 0 :(得分:0)
基本的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)
答案 1 :(得分:0)
通过给定字母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)