循环以根据对其他变量的答案创建新变量
Loop to create new variable based on answers to other variables
我想根据我的数据集中其他三个变量(A、B 和 C)的答案创建一个新变量。基本上我的变量有三种形式:“经常”、“有时”和“从不”。我想要一个新变量,其中每个人的等级从 0 到 3。对于每个变量(A、B 和 C),如果他回答“经常”,他得到 1 分,否则他得到 0.
我的数据集看起来像这样,“经常”用 2 编码; “有时”用 1 编码,“从不”用 0 编码。
A <- c(2,1,1,NA, 0,2)
B <- c(2,2,0,1,2,NA)
C <- c(2,1,NA,2,1,0)
data <- data.frame(A,B,C)
我知道我可以使用 case_when,但这是一个相当笨拙的解决方案。我在想一个循环,但我从未在 R 中使用过循环。你能帮我解决这个循环吗?
你的意思是这样的吗?
更新:感谢 markus。他的解决方案(rowSums(data == 2, na.rm = TRUE))
比我原来的
好多了
基础 R
data$points = rowSums(data == 2, na.rm = TRUE)
dplyr
library(dplyr)
data %>% mutate(point = rowSums(data == 2, na.rm = TRUE))
data.table
library(data.table)
setDT(data)
data[, points:=rowSums(data == 2, na.rm = TRUE)]
输出
> data
A B C points
1 2 2 2 3
2 1 2 1 1
3 1 0 NA 0
4 NA 1 2 1
5 0 2 1 1
6 2 NA 0 1
我想根据我的数据集中其他三个变量(A、B 和 C)的答案创建一个新变量。基本上我的变量有三种形式:“经常”、“有时”和“从不”。我想要一个新变量,其中每个人的等级从 0 到 3。对于每个变量(A、B 和 C),如果他回答“经常”,他得到 1 分,否则他得到 0.
我的数据集看起来像这样,“经常”用 2 编码; “有时”用 1 编码,“从不”用 0 编码。
A <- c(2,1,1,NA, 0,2)
B <- c(2,2,0,1,2,NA)
C <- c(2,1,NA,2,1,0)
data <- data.frame(A,B,C)
我知道我可以使用 case_when,但这是一个相当笨拙的解决方案。我在想一个循环,但我从未在 R 中使用过循环。你能帮我解决这个循环吗?
你的意思是这样的吗?
更新:感谢 markus。他的解决方案(rowSums(data == 2, na.rm = TRUE))
比我原来的
基础 R
data$points = rowSums(data == 2, na.rm = TRUE)
dplyr
library(dplyr)
data %>% mutate(point = rowSums(data == 2, na.rm = TRUE))
data.table
library(data.table)
setDT(data)
data[, points:=rowSums(data == 2, na.rm = TRUE)]
输出
> data
A B C points
1 2 2 2 3
2 1 2 1 1
3 1 0 NA 0
4 NA 1 2 1
5 0 2 1 1
6 2 NA 0 1