如何根据mulitple列和r中的行值添加计算的行



如果我有以下数据框架,我想为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向量。如果Letterfactor,则可以从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)

最新更新