如何基于r in中的多个列和行值添加计算的行?

时间:2019-03-01 21:36:38

标签: r dplyr calculated-columns

如果下面有一个数据框,我想为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

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

这要求列Lettercharacter向量。如果Letterfactor,则可以从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)