我需要将嵌套数据集重组为一个平面数据集。
我的数据集如下:
UserID Test
<p>A X
<p>A Y
<p>A Z
<p>B Y
<p>B Z
每个用户完成了不同数量的测试,并且他们的顺序是任意的。 X,Y和Z代表统一的字符串测试名称。
我需要它看起来像这样:
UserID X Y Z
<p>A 1 1 1
<p>B 0 1 1
1-完成测试; 0-未完成测试。
换句话说,我需要执行某种标记,但是要从多列(而不是单个字符串)中进行。
对于如何实现此目标的任何建议,我将不胜感激。谢谢!
我使用UserId作为标识符转换了数据集,但结果数据集的列数与任何用户最大数量的已完成测试(这很好)一样,但是相同的测试在用户中未对齐(例如,第一列用于用户A之所以包含X,是因为用户A首先完成了测试X,而用户B则是Y,原因是用户未完成测试X,或者未按照相同的顺序完成测试。
答案 0 :(得分:0)
一个选项是
library(dplyr)
library(tidyr)
df1 %>%
extract(Test, into = c("Test", "colNm"), sep= "(.*);[^;]+$") %>%
mutate(colNm = str_c(colNm, " ", sep="_")) %>%
group_by(UserID) %>%
mutate(rn = row_number()) %>%
spread(colNm, Test)