我在R中设置的数据看起来像这样
post "/purchases/:id" => "purchases#show"
post "/hook" => "purchases#hook"
我想在Q1 - Q10中加上数字来创建一个分数。我怎样才能做到这一点? 感谢
答案 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