【问题标题】:Calculate Min Mean Max For Rows Where Multiple Columns Have Same Values计算多列具有相同值的行的最小均值最大值
【发布时间】:2019-03-28 18:44:23
【问题描述】:

在下面的数据集中,我想首先检查哪些行对于列UT 具有相同的值。对于所有这些行,我想计算 Mean 列的平均值、Min 列的最小值和 Max 列的最大值。

如果列UT 具有相同值的行是分开的data.frame(),我可以轻松做到这一点,但对于这种情况,我首先需要提取所有此类子data.frame()data.frame() 和然后执行操作。

如果有人使用R 库有更好的方法请提出建议?

输入数据

data <- structure(list(A = c(0.1, 0.1, 0.1, 0.1), B = c(NA, NA, NA, NA
), C = structure(c(1L, 1L, 1L, 1L), .Label = "Yes", class = "factor"), 
    U = c(11L, 11L, 11L, 11L), T = structure(c(1L, 1L, 1L, 1L
    ), .Label = "A", class = "factor"), P = structure(c(1L, 1L, 
    1L, 1L), .Label = "INT", class = "factor"), Q = 1:4, R = c(0L, 
    0L, 0L, 0L), S = c(1L, 1L, 1L, 1L), W = structure(c(1L, 1L, 
    1L, 1L), .Label = "A", class = "factor"), Mean = c(21.208, 
    21.22333333, 21.23666667, 21.174), Min = c(21.02, 21.01, 
    21.09, 21.02), Max = c(21.35, 21.39, 21.47, 21.36)), class = "data.frame", row.names = c(NA, 
-4L))

预期输出

A   B   C   U   T   P   Q   R   S   T   Mean    Min     Max
0.1 NA  Yes 11  A   INT 4   0   1   A   21.2105 21.01   21.47

【问题讨论】:

  • 你是怎么得到这个数据集的?
  • .@akrun - 我显示的输出基本上是首先计算Mean 列的平均值,然后是Min 列的最小值,然后是Max 列的最大值。这就像对三个不同行的三向参数计算。我显然使用 excel 来显示预期的输出。
  • 看起来很有趣
  • .@akrun - 这很有挑战性,而且对你来说很有趣,我当然不可能为此编写R 代码:-(。

标签: r dataframe


【解决方案1】:

我们可以使用

library(tidyverse)
data %>% 
  group_by(U, T) %>%
  mutate(Mean = mean(Mean), Min = min(Min), Max = max(Max))%>% 
  slice(1)

【讨论】:

  • .@akrun - 谢谢。但是vars(A:P)是针对上面的数据集的,怎么才能让它动态呢?
  • @ChetanArvindPatil 在您的描述中,它说U, T 是列
  • .@akrun - 不。在问题中我提到主键是列 UT 应该用于对行进行分组。
  • @ChetanArvindPatil 好的,我将代码更改为将列分组为 U、T,同时从 mutate 步骤中的另一列获取平均值、最小值和最大值
  • .@akrun - 你能解释一下slice(1)的用法吗?
【解决方案2】:
nm = names(data)[!names(data) %in% c("Mean", "Min", "Max")]
do.call(rbind, lapply(split(data, paste(data$U, data$T)), function(x){
    data.frame(x[1, nm], Mean = mean(x$Mean), Min = min(x$Min), Max = max(x$Max))
}))
#       A  B   C  U T   P Q R S W    Mean   Min   Max
#11 A 0.1 NA Yes 11 A INT 1 0 1 A 21.2105 21.01 21.47

【讨论】:

  • .@d.b - 谢谢。 x[1,1:10] 不是动态的吗?我可以使用x[1,1:ncol(data)]吗?
猜你喜欢
  • 2016-11-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-04-06
  • 1970-01-01
  • 2021-01-25
相关资源
最近更新 更多