我是R的新手,正在为下面的问题而挣扎。我有一个数据集,其中包含人口统计学特征和几个变量,这些变量基于我们编码的定性数据。有六个基于音调的变量,分别称为音调1、音调2、音调3、音调4、音调5和音调6。音调变量是分类的(1 =正;2 =阴性;3 =中性)。每个回答者可以有一个以上的语气。我试图创建两个变量-一个是每个观察的6个语气列中1(阳性)的计数,另一个是6个语气列中2(阴性)的计数。我一直无法在网上找到我想要的确切内容。
The df looks somewhat like this:
resp. Tone1. Tone2. Tone3. Tone4. Tone5. Tone6.
a. 1. 2. 1. 1. 2. NA
b. 2. 2. NA. NA. NA. NA.
c. 3. 1. NA. NA. NA. NA
d. 1. 1. 2. 2. 1. 1.
# Creating example df
df <- data.frame( resp = c("a", "b",
"c", "d"),
Tone1 = c(1, 2, 3, 1),
Tone2 = c(2, 2, 1, 1),
Tone3 = c(1, NA, NA, 2),
Tone4 = c(1, NA, NA, 2),
Tone5 = c(2, NA, NA, 1),
Tone6 = c(NA, NA, NA, 1))
and I am looking to get this:
resp. Tone1. Tone2. Tone3. Tone4. Tone5. Tone6. count_pos. count_neg.
a. 1. 2. 1. 1. 2. NA. 3. 2
b. 2. 2. NA. NA. NA. NA. 0 2
c. 3. 1. NA. NA. NA. NA 1 0
d. 1. 1. 2. 2. 1. 1. 4 2
我尝试了以下方法,但没有给予我想要的结果,最后得到了一个名为count_pos[,“Tone 6”]的列,其中填充了NA。
gesis$count_pos <- 0
for (i in 1:6) {
gesis$count_pos <- gesis$count_pos + ifelse(gesis[,paste0("Tone",i)]==1,1,0)
}
我真的很感激任何建议,并提前感谢!我真的希望这不是太复杂。
2条答案
按热度按时间tjvv9vkg1#
您可以避免
for
循环,而改用rowSums
wd2eg0qa2#
这里有一个整洁的方式:
由reprex package(v2.0.1)于2023年1月19日创建