首页 > 解决方案 > 根据另一列中的值计算多列(但对于每一行)中的出现次数

问题描述

我目前正在尝试分析一个数据集,其中我有一列给我每行感兴趣的值(称为 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

解决方案


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

推荐阅读