如果我有以下数据框架,我想为r:
中的每个组添加另一行dataframe之前:
Letter Value
A 1
A 2
A 3
B 1
B 2
B 3
如果我只想为每个组平均这些行添加另一行,我将如何解决:
dataframe之后:
Letter Value
A 1
A 2
A 3
A 2
B 1
B 2
B 3
B 2
基本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
vector
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)
通过给ag
的字母计算值的平均值,rbind到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)