如何将R中特定列的值相加

时间:2016-09-25 12:29:21

标签: r

我在R中设置的数据看起来像这样

post "/purchases/:id" => "purchases#show"
post "/hook" => "purchases#hook"

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

2 个答案:

答案 0 :(得分:0)

假设您将数据保存到R变量dat中 要在Q10中添加Q1,您只需使用:

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之前将字符数据类型(或因子)的列转换为数字数据类型。如果&#39;转型&#39;在导入数据时会发生从数字到字符的问题,请阅读此post,解释在将数据导入R时有时使用stringsAsFactors=FALSE可能会解决类似的问题。

答案 1 :(得分:0)

转载您的数据:

      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 *变量现在是数字的,因此您可以通过仅选择以&#34; Q&#34;开头的变量来对待它们。使用 dplyr :: select 动词并使用 rowSumns 可以总结给定行的所有列,以便:

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

其中:

  • select(starts_with("Q")) =选择以Q

  • 开头的列
  • rowSums(.) =总结所选列

  • -> =将结果分配给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