【问题标题】:Generate new column in dataframe, based on group-event in nested groups根据嵌套组中的组事件在数据框中生成新列
【发布时间】:2018-10-28 19:11:29
【问题描述】:

我有一个数据框,其中包含三个“主要”组(x:1、2、3)、主要组内的三个组(v:2、3 或 1)以及主要组内的一些事件(0和 1 在 y):

x <- c(1, 1, 1, 2, 2, 3, 3, 3, 3)
v <- c(2, 3, 3, 2, 2, 1, 1, 2, 2)
y <- c(0, 0, 1, 0, 0, 0, 0, 0, 1)
df <- data.frame(x, v, y)
df

> df
  x v y
1 1 2 0
2 1 3 0
3 1 3 1
4 2 2 0
5 2 2 0
6 3 1 0
7 3 1 0
8 3 2 0
9 3 2 1

例如:在第 1 组 (x = 1) 中还有两个组(v = 2 和 v = 3),事件 y = 1 发生在 x = 1 和 v = 3 组中。

现在我想根据 y 中的事件生成一个新列 z:如果一组中存在任何 y = 1,则 x 中组 v 中的所有情况都应为 z 获得 1;否则不适用。如何以这种方式生成 z? df 应该是这样的:

> df
  x v y  z
1 1 2 0 NA
2 1 3 0  1
3 1 3 1  1
4 2 2 0 NA
5 2 2 0 NA
6 3 1 0  1
7 3 1 1  1
8 3 2 0 NA
9 3 2 0 NA

感谢您的帮助。

【问题讨论】:

    标签: r dataframe dplyr data.table


    【解决方案1】:
    df %>% group_by(x, v) %>% mutate(z = if(any(y == 1)) 1 else NA)
    

    xy分组后,如果y中有1,则新列z填充1,否则填充NA

    【讨论】:

      【解决方案2】:

      试试这个:

      library(dplyr)
      
      df %>%
      group_by(x, v) %>%
      mutate(
      z = ifelse(any(y == 1), 1, NA)
      )
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2023-03-30
        • 2018-05-06
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-01-13
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多