如何在 R 中的多个调查问题上设置 for 循环
How to set for loop on multiple survey questions in R
我有一个调查数据,当问题 cmb.df$b3002
有多个选择 1,2,3, and 4
时,for 循环起作用,我可以通过 table(cmb.df$b3002)[i]
遍历每个选择,
但其中一题的多项选择记录为cmb.df$b3002a_1_1_mc
、cmb.df$b3002a_1_2_mc
、……cmb.df$b3002a_1_9_mc
。如何为此创建一个 for 循环?非常感谢。
usq <- NULL
for(i in 1:4) {
# i-th element of `u1` squared into `i`-th position of `usq`
usq[i] <- table(cmb.df$b3002)[i]
}
usq
[1] 5894 472 180 43
数据集很大而且
a <- cbind(cmb.df$b3002, cmb.df$b3002a_1_1_mc, cmb.df$b3002a_1_2_mc, cmb.df$b3002a_1_3_mc, cmb.df$b3002a_1_4_mc,
cmb.df$b3002a_1_5_mc, cmb.df$b3002a_1_6_mc, cmb.df$b3002a_1_7_mc, cmb.df$b3002a_1_8_mc, cmb.df$b3002a_1_9_mc )
dput(head(a, 20))
structure(c(NA_real_, NA_real_, NA_real_, NA_real_, NA_real_,
NA_real_, NA_real_, NA_real_, NA_real_, NA_real_, NA_real_, NA_real_,
NA_real_, NA_real_, NA_real_, NA_real_, NA_real_, NA_real_, NA_real_,
NA_real_, NA_real_, NA_real_, NA_real_, NA_real_, NA_real_, NA_real_,
NA_real_, NA_real_, NA_real_, NA_real_, NA_real_, NA_real_, NA_real_,
NA_real_, NA_real_, NA_real_, NA_real_, NA_real_, NA_real_, NA_real_,
NA_real_, NA_real_, NA_real_, NA_real_, NA_real_, NA_real_, NA_real_,
NA_real_, NA_real_, NA_real_, NA_real_, NA_real_, NA_real_, NA_real_,
NA_real_, NA_real_, NA_real_, NA_real_, NA_real_, NA_real_, NA_real_,
NA_real_, NA_real_, NA_real_, NA_real_, NA_real_, NA_real_, NA_real_,
NA_real_, NA_real_, NA_real_, NA_real_, NA_real_, NA_real_, NA_real_,
NA_real_, NA_real_, NA_real_, NA_real_, NA_real_, NA_real_, NA_real_,
NA_real_, NA_real_, NA_real_, NA_real_, NA_real_, NA_real_, NA_real_,
NA_real_, NA_real_, NA_real_, NA_real_, NA_real_, NA_real_, NA_real_,
NA_real_, NA_real_, NA_real_, NA_real_, NA_real_, NA_real_, NA_real_,
NA_real_, NA_real_, NA_real_, NA_real_, NA_real_, NA_real_, NA_real_,
NA_real_, NA_real_, NA_real_, NA_real_, NA_real_, NA_real_, NA_real_,
NA_real_, NA_real_, NA_real_, NA_real_, NA_real_, NA_real_, NA_real_,
NA_real_, NA_real_, NA_real_, NA_real_, NA_real_, NA_real_, NA_real_,
NA_real_, NA_real_, NA_real_, NA_real_, NA_real_, NA_real_, NA_real_,
NA_real_, NA_real_, NA_real_, NA_real_, NA_real_, NA_real_, NA_real_,
NA_real_, NA_real_, NA_real_, NA_real_, NA_real_, NA_real_, NA_real_,
NA_real_, NA_real_, NA_real_, NA_real_, NA_real_, NA_real_, NA_real_,
NA_real_, NA_real_, NA_real_, NA_real_, NA_real_, NA_real_, NA_real_,
NA_real_, NA_real_, NA_real_, NA_real_, NA_real_, NA_real_, NA_real_,
NA_real_, NA_real_, NA_real_, NA_real_, NA_real_, NA_real_, NA_real_,
NA_real_, NA_real_, NA_real_, NA_real_, NA_real_, NA_real_, NA_real_,
NA_real_, NA_real_, NA_real_, NA_real_, NA_real_, NA_real_, NA_real_,
NA_real_, NA_real_, NA_real_, NA_real_, NA_real_, NA_real_), .Dim = c(20L,
10L))
也许下面的tidyverse
解决方案可以完成问题的要求。它通过从宽格式重塑为长格式来创建列 "b300a"
。
library(dplyr)
library(tidyr)
cmb.df %>%
pivot_longer(cols = starts_with("b3002a"), names_to = "b3002a") %>%
mutate(b3002a = sub("^.*(\d+)_mc", "\1", b3002a),
b3002a = as.integer(b3002a)*value) %>%
select(-value) %>%
na.omit()
我有一个调查数据,当问题 cmb.df$b3002
有多个选择 1,2,3, and 4
时,for 循环起作用,我可以通过 table(cmb.df$b3002)[i]
遍历每个选择,
但其中一题的多项选择记录为cmb.df$b3002a_1_1_mc
、cmb.df$b3002a_1_2_mc
、……cmb.df$b3002a_1_9_mc
。如何为此创建一个 for 循环?非常感谢。
usq <- NULL
for(i in 1:4) {
# i-th element of `u1` squared into `i`-th position of `usq`
usq[i] <- table(cmb.df$b3002)[i]
}
usq
[1] 5894 472 180 43
数据集很大而且
a <- cbind(cmb.df$b3002, cmb.df$b3002a_1_1_mc, cmb.df$b3002a_1_2_mc, cmb.df$b3002a_1_3_mc, cmb.df$b3002a_1_4_mc,
cmb.df$b3002a_1_5_mc, cmb.df$b3002a_1_6_mc, cmb.df$b3002a_1_7_mc, cmb.df$b3002a_1_8_mc, cmb.df$b3002a_1_9_mc )
dput(head(a, 20))
structure(c(NA_real_, NA_real_, NA_real_, NA_real_, NA_real_,
NA_real_, NA_real_, NA_real_, NA_real_, NA_real_, NA_real_, NA_real_,
NA_real_, NA_real_, NA_real_, NA_real_, NA_real_, NA_real_, NA_real_,
NA_real_, NA_real_, NA_real_, NA_real_, NA_real_, NA_real_, NA_real_,
NA_real_, NA_real_, NA_real_, NA_real_, NA_real_, NA_real_, NA_real_,
NA_real_, NA_real_, NA_real_, NA_real_, NA_real_, NA_real_, NA_real_,
NA_real_, NA_real_, NA_real_, NA_real_, NA_real_, NA_real_, NA_real_,
NA_real_, NA_real_, NA_real_, NA_real_, NA_real_, NA_real_, NA_real_,
NA_real_, NA_real_, NA_real_, NA_real_, NA_real_, NA_real_, NA_real_,
NA_real_, NA_real_, NA_real_, NA_real_, NA_real_, NA_real_, NA_real_,
NA_real_, NA_real_, NA_real_, NA_real_, NA_real_, NA_real_, NA_real_,
NA_real_, NA_real_, NA_real_, NA_real_, NA_real_, NA_real_, NA_real_,
NA_real_, NA_real_, NA_real_, NA_real_, NA_real_, NA_real_, NA_real_,
NA_real_, NA_real_, NA_real_, NA_real_, NA_real_, NA_real_, NA_real_,
NA_real_, NA_real_, NA_real_, NA_real_, NA_real_, NA_real_, NA_real_,
NA_real_, NA_real_, NA_real_, NA_real_, NA_real_, NA_real_, NA_real_,
NA_real_, NA_real_, NA_real_, NA_real_, NA_real_, NA_real_, NA_real_,
NA_real_, NA_real_, NA_real_, NA_real_, NA_real_, NA_real_, NA_real_,
NA_real_, NA_real_, NA_real_, NA_real_, NA_real_, NA_real_, NA_real_,
NA_real_, NA_real_, NA_real_, NA_real_, NA_real_, NA_real_, NA_real_,
NA_real_, NA_real_, NA_real_, NA_real_, NA_real_, NA_real_, NA_real_,
NA_real_, NA_real_, NA_real_, NA_real_, NA_real_, NA_real_, NA_real_,
NA_real_, NA_real_, NA_real_, NA_real_, NA_real_, NA_real_, NA_real_,
NA_real_, NA_real_, NA_real_, NA_real_, NA_real_, NA_real_, NA_real_,
NA_real_, NA_real_, NA_real_, NA_real_, NA_real_, NA_real_, NA_real_,
NA_real_, NA_real_, NA_real_, NA_real_, NA_real_, NA_real_, NA_real_,
NA_real_, NA_real_, NA_real_, NA_real_, NA_real_, NA_real_, NA_real_,
NA_real_, NA_real_, NA_real_, NA_real_, NA_real_, NA_real_, NA_real_,
NA_real_, NA_real_, NA_real_, NA_real_, NA_real_, NA_real_), .Dim = c(20L,
10L))
也许下面的tidyverse
解决方案可以完成问题的要求。它通过从宽格式重塑为长格式来创建列 "b300a"
。
library(dplyr)
library(tidyr)
cmb.df %>%
pivot_longer(cols = starts_with("b3002a"), names_to = "b3002a") %>%
mutate(b3002a = sub("^.*(\d+)_mc", "\1", b3002a),
b3002a = as.integer(b3002a)*value) %>%
select(-value) %>%
na.omit()