【问题标题】:How to set for loop on multiple survey questions in R如何在R中的多个调查问题上设置for循环
【发布时间】:2021-08-20 10:16:33
【问题描述】:

我有一个调查数据,当问题 cmb.df$b3002 有多个选择 1,2,3, and 4 时,for 循环有效,我可以通过 table(cmb.df$b3002)[i] 遍历每个选择, 但其中一个问题的多项选择记录为cmb.df$b3002a_1_1_mccmb.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))

 

【问题讨论】:

  • cmb.df$b3002a_1_1_mccmb.df$b3002a_1_2_mc等,是不同的向量吗?请注意,您不需要问题中的循环,它相当于usq&lt;-table(cmb.df$b3002_1)
  • 您能以dput 格式发布示例数据吗?请使用dput(cmb.df) 的输出编辑问题。或者,如果 dput(head(cmb.df, 20)) 的输出太大。
  • cmb.df$b3002a中的主要问题,有9个多项选择,每个多项选择记录为cmb.df$b3002a_1_1_mc,.... cmb.df$b3002a_1_9_mc,我想像上面一样设置 for 循环,但我不确定如何保存 for 循环响应。

标签: r for-loop data-manipulation


【解决方案1】:

也许以下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()

【讨论】:

  • 非常感谢您抽出宝贵时间,但它给出了错误:无法组合 b3002a_1 b3002a_1_1_mc 。有什么办法可以输入名字 cmb.df$b3002a_1_[i]_mc.
  • @SeymaKalay 试试starts_with("b3002a_1_") 看看它是否有效。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-06-10
  • 2019-07-27
  • 1970-01-01
  • 2013-03-03
  • 2021-02-27
  • 2020-02-03
相关资源
最近更新 更多