R 帮助 - 有关如何使用随机顺序选择对质量调查问题的结果进行编码的建议

问题描述 投票:0回答:2

提前感谢您的帮助。 我正在清理一项质量调查中的数据,其中包括一些答案选择是随机的问题(例如,您对五个电视节目进行评分,并且每个受访者的节目顺序都是随机的)。每个答案显示为单独的列:例如tv_show_1、tv_show_2,行是各个受访者的评分(优秀、好、差等),然后有一列告诉我每个调查受访者的显示顺序,电视节目使用像这样的竖线分隔|。

我从来没有处理过这样的事情,并且有点困惑。我希望得到一些帮助,了解如何编写 R 代码或可以获取显示顺序列的函数,并使用它对前五列中给出的答案进行分类(或者您能想到的任何其他比这更好的方法) )。谢谢!

我还没有尝试过任何东西!看看数据就知道了

这是数据的示例(这是为示例而制作的!):

respondents <- c("Respondent 1", "Respondent 2", "Respondent 3")
tv_show_1 <- c("excellent", "good", "bad")
tv_show_2 <- c("good", "bad", "neutral")
tv_show_3 <- c("neutral", "good", "neutral")
tv_show_DO <- c("Friends|Seinfeld|Full House", "Seinfeld|Friends|Full House", "Seinfeld|Full House|Friends")


df <- data.frame(respondents, tv_show_1, tv_show_2, tv_show_3, tv_show_DO)
print(df)
r rstudio survey qualtrics
2个回答
0
投票

试试这个

> res <- by(df, df$respondents, \(x) {
+   shw <- el(strsplit(x$tv_show_DO, '\\|'))
+   tv <- unlist(x[grep('^tv_show_[1-3]', names(x))])[order(shw)] |> 
+     setNames(sort(shw)) |> t() |> as.data.frame()
+   cbind(respondents=x[, 1], tv)
+ }) |> do.call(what='rbind')
> res
              respondents   Friends Full House Seinfeld
Respondent 1 Respondent 1 excellent    neutral     good
Respondent 2 Respondent 2       bad       good     good
Respondent 3 Respondent 3   neutral    neutral      bad

0
投票

您拥有按列名称编码的数据(例如

tv_show_1
)和按位置编码的数据(例如
a|b|c
)的组合。有很多方法可以解决这个问题,但为了进一步分析,我建议将数据放入整洁的格式,其中位置编码在其自己的列中明确显示。我们可以分别对两种类型的数据进行此操作,然后将它们组合起来。

library(tidyverse)

首先,我收集评级列并将其旋转更长的时间。

df_ratings <- df |>
  select(-tv_show_DO) |>
  pivot_longer(-respondents)

我们可以对分隔数据做类似的事情:

df_shows <- df |>
  select(respondents, tv_show_DO) |>
  separate_longer_delim(tv_show_DO, delim = "|") |>
  mutate(name = paste0("tv_show_", row_number()), .by = respondents)

最后结合:

df_shows |>
  left_join(df_ratings)
© www.soinside.com 2019 - 2024. All rights reserved.