【问题标题】:Sum values from rows with conditions in R对具有 R 中条件的行的值求和
【发布时间】:2021-06-30 20:34:52
【问题描述】:

我需要创建一个新列,其中包含其他几列中的总和值,但有条件。

我的数据是

ID <- c(A,B,C,D,E,F)
Q1 <- c(0,1,7,9,na,3) 
Q2 <- c(0,3,2,2,na,3) 
Q3 <- c(0,0,7,9,na,3) 

dta <- as.data.frame (ID,Q1,Q2,Q3) 

仅当值 4,则应忽略结果。我需要保留只有“na”的行。

结果应该是这样的

Result 
0
4
na
na
na
9

我试过了:

library(dplyr)
dta %>% filter(Q1 < 4) %>% mutate(Result = rowSums(.[2:4]))

但是,所有值 > 4 的行都消失了,我一次只能过滤一行。我也试过:

dta$Result <- ifelse(c("Q1", "Q2", "Q3") < 4, rowSums(.[2:4]), NA)

但是我所有的结果都是“na”

【问题讨论】:

    标签: r dataframe


    【解决方案1】:
    ID <- c("A","B","C","D","E","F")
    Q1 <- c(0,1,7,9,NA,3) 
    Q2 <- c(0,3,2,2,NA,3) 
    Q3 <- c(0,0,7,9,NA,3) 
    
    dta <- data.frame(ID,Q1,Q2,Q3)
    

    您必须切换sumifelse 语句。

    dta %>% 
       rowwise() %>%
       mutate(result = sum(ifelse(c(Q1, Q2, Q3)<4, c(Q1, Q2, Q3), NA)))
    

    【讨论】:

      【解决方案2】:

      您可以使用以下解决方案:

      library(dplyr)
      
      dta %>%
        rowwise() %>%
        mutate(Result = ifelse(any(c_across(Q1:Q3) > 4), NA, Reduce(`+`, c_across(Q1:Q3))))
      
      # A tibble: 6 x 5
      # Rowwise: 
        ID       Q1    Q2    Q3 Result
        <chr> <dbl> <dbl> <dbl>  <dbl>
      1 A         0     0     0      0
      2 B         1     3     0      4
      3 C         7     2     7     NA
      4 D         9     2     9     NA
      5 E        NA    NA    NA     NA
      6 F         3     3     3      9
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2014-09-30
        • 2022-12-11
        • 2023-01-26
        • 2023-01-16
        • 1970-01-01
        • 2018-05-04
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多