【问题标题】:How to create summary column from a first column based on values of a second如何根据第二列的值从第一列创建汇总列
【发布时间】:2020-08-22 03:53:55
【问题描述】:

很抱歉,如果这是一个不清楚的问题表述方式。这是我正在尝试做的事情:

假设我有一个包含 x、y 和 z 列的 df data1。我想要做的是:按 x 分组,然后创建一个汇总列,它是 y 的最小值(对于 x 的每个值)。即,

data2 <- data1 %>%
group_by(x) %>%
summarize(min_y = min(y))

然后我想创建第二个汇总列,它是每个最小 y 的 z 值。例如,假设data1 中有三行,其中 x 为 5,这些行的 y 值为 1、2 和 3。在这些相同的行中,z 值分别为 6、5、和 4. 我想要做的是在data2 中设置 x 为 5 且 y 为 1 的行具有 z = 6,因为这是与 x = 5 的 y 的最小值相关联的 z 值。我试过了:

z_for_miny = z[min(y)]

但这似乎不起作用。有什么想法吗?

【问题讨论】:

标签: r dplyr


【解决方案1】:

我们可以使用which.min找到'y'的最小值的索引,并用它来得到'z'的对应值。如果有平局,这将只返回'y'为最小值的第一个实例

library(dplyr)
data1 %>%
         group_by(x) %>%
         summarise(min_y = min(y), z_for_miny = z[which.min(y)])

如果我们有dplyr >= 1.0.0,summarise 也可以返回不止一行。所以,min 值中的关系可以用逻辑条件== 过滤

data1 %>%
         group_by(x) %>%
         summarise(min_y = min(y), z_for_miny = z[y == min(y)])

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-04-24
    • 1970-01-01
    • 2022-11-01
    • 2015-05-18
    • 2012-12-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多