簡體   English   中英

如何計算多個列中特定值的出現次數?

[英]How to count occurrences of a specific value across multiple columns?

我想計算特定值在多個列中出現的次數,並將出現次數放在新列中。 我的數據集有很多缺失值,但只有當整行僅由 NA 組成時,它才應該返回 NA。 如果可能的話,我更喜歡與 dplyr 管道一起使用的東西。

示例數據集:

df <- data.frame(c1 = sample(1:4, 20, replace = TRUE),
                 c2 = sample(1:4, 20, replace = TRUE),
                 c3 = sample(1:4, 20, replace = TRUE),
                 c4 = sample(1:4, 20, replace = TRUE),
                 c5 = sample(1:4, 20, replace = TRUE))

for (i in 1:5) {
  df[sample(1:20, 1), sample(1:5, 1)] <- NA
  df[sample(1:20, 1), ] <- NA
}
   c1 c2 c3 c4 c5
1   1  2  4  4  1
2   2  2  1  3  4
3   2  4  4  3  3
4   4  2  3  2  1
5   4  2  4  1  3
6  NA  1  2  4  4
7   3 NA  4 NA  4
8  NA NA NA NA NA
9   1  3  3  2  2
10 NA NA NA NA NA

我試過 rowwise() 和 rowSums。 這里有一些不工作的例子:

# First attempt
df <- df %>%
  rowwise() %>%
  mutate(count2 = sum(c_across(c1:c5, ~.x %in% 2)))

# Second attempt
df <- df %>%
  rowwise() %>%
  mutate(count2 = sum(c_across(select(where(c1:c5 %in% 2)))))

# With rowSums
df <- df %>%
  rowwise() %>%
  mutate(count4 = rowSums(select(c1:c5 %in% 4), na.rm = TRUE))

這個怎么樣:

library(dplyr)
df <- data.frame(c1 = sample(1:4, 20, replace = TRUE),
                 c2 = sample(1:4, 20, replace = TRUE),
                 c3 = sample(1:4, 20, replace = TRUE),
                 c4 = sample(1:4, 20, replace = TRUE),
                 c5 = sample(1:4, 20, replace = TRUE))

for (i in 1:5) {
  df[sample(1:20, 1), sample(1:5, 1)] <- NA
  df[sample(1:20, 1), ] <- NA
}

df %>% 
  rowwise() %>% 
  mutate(count2 = sum(na.omit(c_across(c1:c5)) == 2), 
         count2 = ifelse(all(is.na(c_across(c1:c5))), NA, count2))
#> # A tibble: 20 × 6
#> # Rowwise: 
#>       c1    c2    c3    c4    c5 count2
#>    <int> <int> <int> <int> <int>  <int>
#>  1    NA    NA    NA    NA    NA     NA
#>  2     2     2     3     4     2      3
#>  3     1     1     1     4     4      0
#>  4     2     3     3     2     4      2
#>  5    NA    NA    NA    NA    NA     NA
#>  6     1     1     1     2     1      1
#>  7     3     3     2     3     4      1
#>  8     1     1     4     3     4      0
#>  9    NA    NA    NA    NA    NA     NA
#> 10    NA    NA    NA    NA    NA     NA
#> 11     2     3     3     4     1      1
#> 12     2     1     4     2    NA      2
#> 13     4     4     2    NA     2      2
#> 14     4     2     3     3     2      2
#> 15     1     3     4     2     2      2
#> 16     1     1     3     3     2      1
#> 17     1     1     1     4     4      0
#> 18     2     4     4    NA     1      1
#> 19    NA    NA    NA    NA    NA     NA
#> 20     4     1     1    NA     4      0

reprex package (v2.0.1) 創建於 2022-12-08

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM