【发布时间】:2020-01-19 15:00:48
【问题描述】:
我正在做一个研究项目,其中一个表格的输入方式还不太适合分析,所以我正在尝试重新组织它。目前,每一行是一个考生,每一列是他们答错的问题,按升序输入。因此,对于第一行,第一列、第二列和第三列的条目可能分别为“Q1”“Q3”“Q9”等。总共有 25 个问题。
我的目标是重新组织数据,以便每个问题都有一个列。如果应试者正确回答了问题,则相应列的条目为 1,否则为 0。
有一种蛮力的方式似乎可行。可以单独改变每一列并检查每一列中的每个值。但是,有 25 个问题,而且所有这些打字似乎效率极低,所以我怀疑一定有更好的方法。
蛮力代码看起来像:
df %>%
mutate(Q3 == ifelse(col1 == "Q3" | col2 == "Q3" | col3 == "Q3", 0, 1))
这里 col1, col2, col3 都是可能包含 Q3 的列,这可能是考生答错的问题。如果有任何一个,我们输入 0。否则,我们输入 1。
25 个问题,代码太长了。
编辑:数据框的示例如下所示。
sample <- "ID Col1 Col2 Col3 Col4
1 100 Q1
2 101 Q3 Q4
3 102 Q2 Q3 Q4
4 103
5 104 Q4
6 105 Q1 Q2 Q3 Q4 "
想要的输出如下:
sample <- "ID Q1 Q2 Q3 Q4
1 100 0 1 1 1
2 101 1 1 0 0
3 102 1 0 0 0
4 103 1 1 1 1
5 104 1 1 1 0
6 105 0 0 0 0 "
【问题讨论】:
-
您能否分享输入数据的样本(不是所有列,也不是所有行)以及基于此的所需输出。阅读此主题以了解有关通过可重复示例提问的更多信息:stackoverflow.com/questions/5963269/…
标签: r dataframe dplyr data-cleaning