r - 跨列和条件按行求和

标签 r dataframe dplyr sum

我有一个包含 90 列(在示例中只有 6)和多行的数据框。我想按行对所有列求和,但仅当值为 4 或 5 时。在结果中,我想要实现条件的次数。我不知道如何在下面的代码中添加这个条件。

我需要任何帮助,谢谢。

df = data.frame(A = c(1,2,2,5,5,2,2,5,5,4,4,4,2,2,5), 
                B = c(2,2,2,5,5,4,2,3,1,4,1,4,5,2,5), 
                C = c(5,3,3,5,5,2,1,5,5,1,1,4,1,2,5), 
                D = c(4,5,5,3,5,5,1,5,5,4,2,3,2,2,1),
                E = c(1,2,2,2,5,2,5,3,3,4,4,4,2,2,1),
                H = c(1,2,2,3,5,2,2,5,3,1,4,4,4,2,3))

> df
   A B C D E H
1  1 2 5 4 1 1
2  2 2 3 5 2 2
3  2 2 3 5 2 2
4  5 5 5 3 2 3
5  5 5 5 5 5 5
6  2 4 2 5 2 2
7  2 2 1 1 5 2
8  5 3 5 5 3 5
9  5 1 5 5 3 3
10 4 4 1 4 4 1
11 4 1 1 2 4 4
12 4 4 4 3 4 4
13 2 5 1 2 2 4
14 2 2 2 2 2 2
15 5 5 5 1 1 3
library(dplyr)

df %>% 
  mutate(sum = rowSums(across(where(is.numeric))))

最佳答案

一个基本解决方案:

df$sum_4_5 <- apply(df, 1, \(x) sum(x[x %in% 4:5]))

dplyr 等效项:

library(dplyr)

df %>%
  rowwise() %>%
  mutate(sum_4_5 = c_across(everything()) %>% { sum(.[. %in% 4:5]) }) %>%
  ungroup()

# # A tibble: 15 × 7
#        A     B     C     D     E     H sum_4_5
#    <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>   <dbl>
#  1     1     2     5     4     1     1       9
#  2     2     2     3     5     2     2       5
#  3     2     2     3     5     2     2       5
#  4     5     5     5     3     2     3      15
#  5     5     5     5     5     5     5      30
# ...

更新

如果你想获取每一行中4和5的个数,代码会更简单:

df %>%
  mutate(sum_4_5 = rowSums(across(where(is.numeric), ~ .x %in% 4:5)))

# # A tibble: 15 × 7
#        A     B     C     D     E     H sum_4_5
#    <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>   <dbl>
#  1     1     2     5     4     1     1       2
#  2     2     2     3     5     2     2       1
#  3     2     2     3     5     2     2       1
#  4     5     5     5     3     2     3       3
#  5     5     5     5     5     5     5       6
# ...

关于r - 跨列和条件按行求和,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/75534759/

相关文章:

r - 在不创建列表列或过多行的情况下旋转更宽

前导行中的引用数据

regex - R:删除字符串开头的前导零

r - ggplot2 geom_boxplot : annotating counts without computing them in advance

r - 在ggplot2中按两个因子变量分组

python - 根据最大数量 pandas Dataframe 将订单数据分割成新行

python - Quarto 图形标题中的引用参数

python - 在数据框列的多个位置插入字符

基于匹配另一列的行子集用均值替换 NA?

r - 使用 dplyr mutate 的唯一值的 cumsum