【问题标题】:count occurrences in multiple columns (but for each row) based on value in another column根据另一列中的值计算多列(但对于每一行)中的出现次数
【发布时间】:2020-06-18 16:09:38
【问题描述】:

我目前正在尝试分析一个数据集,其中我有一列为我提供每行感兴趣的值(称为 value_needed 的列),然后是一堆具有值的列(实际上大约 150),并且很多NA的。对于每一行,我想计算所有其他列中 value_needed 列中该值的出现次数,此处为 position_1:position_6。

这是一些假数据:

position_1 <- c(6, -8, 8, 0, 0, -6)
position_2 <- c(NA, 6, -8, 8, 8, 0)
position_3 <- c(NA, NA, 6, -8, 0, 8)
position_4 <- c(NA, NA, NA, 6, -8, -8)
position_5 <- c(NA, NA, NA, NA, 6, 8)
position_6 <- c(NA, NA, NA, NA, NA, 6)

value_needed <- c(0, 6, -8, 8, 0, 8)

df <- data.frame(position_1, position_2, position_3,position_4, position_5, position_6,value_needed)

在理想情况下,我需要创建一个新列(将其命名为 occ),该列计算该特定行中所有位置列中 value_needed 列中值的出现次数。

上面这个假数据集的输出将是:

occ = c(0,1,1,1,2,1)

如果有人有任何提示,我真的很感激。 谢谢

【问题讨论】:

    标签: r


    【解决方案1】:

    base解决方案

    df$occ <- rowSums(df[1:6] == df$value_needed, na.rm = T)
    

    dplyr解决方案

    library(dplyr)
    
    df %>%
      rowwise() %>%
      mutate(occ = sum(c_across(pos_1:pos_6) == value_needed, na.rm = T)) %>%
      ungroup()
    

    输出

    # # A tibble: 6 x 8
    #   pos_1 pos_2 pos_3 pos_4 pos_5 pos_6 value_needed   occ
    #   <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>        <dbl> <int>
    # 1     6    NA    NA    NA    NA    NA            0     0
    # 2    -8     6    NA    NA    NA    NA            6     1
    # 3     8    -8     6    NA    NA    NA           -8     1
    # 4     0     8    -8     6    NA    NA            8     1
    # 5     0     8     0    -8     6    NA            0     2
    # 6    -6     0     8    -8     8     6            8     2
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-04-12
      • 1970-01-01
      • 2022-06-16
      • 2019-07-23
      • 2021-09-09
      • 2022-01-04
      • 1970-01-01
      • 2020-10-09
      相关资源
      最近更新 更多