【问题标题】: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

这要求列 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)

【讨论】:

    【解决方案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)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-05-26
      相关资源
      最近更新 更多