【问题标题】:How do I add together the values of specific columns in R如何将 R 中特定列的值相加
【发布时间】:2016-09-25 12:29:20
【问题描述】:

我在 R 中的数据集是这样的

      Id Gender   Age Participate    Q1   Q10    Q2    Q3    Q4
*  <int>  <chr> <int>       <int> <chr> <chr> <chr> <chr> <chr>
1     16   Male    20           1     0     1     0     1     1
2     17   Male    40           1     1     0     0     0     0
3     18   Male    33           1     1     0     0     0     0
4     19   Male    18           1     1     0     0     0     0
5     20   Male    24           1     0     0     1     0     0
6     21 Female    42           1     0     0     1     0     0
7     22 Female    19           1     1     0     0     1     1
8     28 Female    49           1     0     1     1     0     0
9     29 Female    17           1     1     0     1     0     0
10    31   Male    18           1     1     0     1     0     0

我想将 Q1 - Q10 中的数字相加来创建一个分数。我怎样才能做到这一点? 谢谢

【问题讨论】:

  • 只需使用df1$Total &lt;- rowSums(df1[6:10])dplyr df1 %&gt;% mutate(Total = rowSums(.[grep("^Q\\d+", names(.))])) 根据列类型,您需要将character 类转换为numericas.numeric

标签: r


【解决方案1】:

假设您将数据保存到 R 变量 dat 要将 Q1 与 Q10 添加,您可以简单地使用:

score <- as.numeric(dat$Q1) + as.numeric(dat$Q10)

如果您想选择两个以上的变量(例如,Q1、Q2、Q3、Q10),您可以这样做(类似于 Akrun 的建议):

score <- rowSums(dat[, paste('Q', c(1:3, 10), sep = '')])

其中rowSums 是对选定列的值求和的函数,paste 创建要选择的列的名称(即 Q1、Q2、Q3 和 Q10)。正如 Akrun 所建议的,您应该在调用 rowSums 之前将具有字符数据类型(或因子)的列转换为数字数据类型。如果在导入数据时发生从数字到字符的“转换”,请阅读此post,解释有时在将数据导入 R 时使用stringsAsFactors=FALSE 可能会解决类似问题。

【讨论】:

    【解决方案2】:

    复制了你的数据:

          Id Gender   Age Participate    Q1   Q10    Q2    Q3    Q4
    *  <int>  <chr> <int>       <int> <chr> <chr> <chr> <chr> <chr>
    1     16   Male    20           1     0     1     0     1     1
    2     17   Male    40           1     1     0     0     0     0
    3     18   Male    33           1     1     0     0     0     0
    4     19   Male    18           1     1     0     0     0     0
    5     20   Male    24           1     0     0     1     0     0
    6     21 Female    42           1     0     0     1     0     0
    7     22 Female    19           1     1     0     0     1     1
    8     28 Female    49           1     0     1     1     0     0
    9     29 Female    17           1     1     0     1     0     0
    10    31   Male    18           1     1     0     1     0     0
    

    首先您需要将 Q1 和 Q10 转换为数字格式,因为它们当前保存为字符。

    Dplyr 包中的

    Mutate_each 允许您将一个或多个函数应用于同一包中的 starts_with 允许的一个或多个列您可以根据名称选择变量。

    因此,将两者结合使用,您可以执行以下操作:

    library(dplyr)
    data <- data %>% 
      mutate_each(funs(as.numeric), starts_with("Q"))
    

    看看结果:

    str(data)
    'data.frame':   10 obs. of  9 variables:
     $ Id         : int  16 17 18 19 20 21 22 28 23 31
     $ Gender     : Factor w/ 2 levels "Female","Male": 2 2 2 2 2 1 1 1 1 2
     $ Age        : int  20 40 33 18 24 42 19 49 17 18
     $ Participate: int  1 1 1 1 1 1 1 1 1 1
     $ Q1         : num  0 1 1 1 0 0 1 0 1 1
     $ Q10        : num  1 0 0 0 0 0 0 1 0 0
     $ Q2         : num  0 0 0 0 1 1 0 1 1 1
     $ Q3         : num  1 0 0 0 0 0 1 0 0 0
     $ Q4         : num  1 0 0 0 0 0 1 0 0 0
    

    您的 Q* 变量现在是数字的,因此您可以通过使用 dplyr::select 动词仅选择以“Q”开头的变量并使用 rowSumns 来处理它们你总结给定行的所有列:

    data %>% select(starts_with("Q")) %>% rowSums(.) -> data$Score
    

    地点:

    • select(starts_with("Q")) = 选择以 Q 开头的列

    • rowSums(.) = 对所选列求和

    • -&gt; = 将结果赋值给data$Score

    然后你可以检查结果:

       Id Gender Age Participate Q1 Q10 Q2 Q3 Q4 Score
    1  16   Male  20           1  0   1  0  1  1     3
    2  17   Male  40           1  1   0  0  0  0     1
    3  18   Male  33           1  1   0  0  0  0     1
    4  19   Male  18           1  1   0  0  0  0     1
    5  20   Male  24           1  0   0  1  0  0     1
    6  21 Female  42           1  0   0  1  0  0     1
    7  22 Female  19           1  1   0  0  1  1     3
    8  28 Female  49           1  0   1  1  0  0     2
    9  23 Female  17           1  1   0  1  0  0     2
    10 31   Male  18           1  1   0  1  0  0     2
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-01-15
      • 2021-08-30
      • 2022-12-31
      • 2023-01-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多