数据框如下所示:
id pom.1 pom.2 pom.3 pom.4 pom.5 pom.6 pom.7 pom.8
20764422 1 3 <NA> <NA> <NA> <NA> <NA> <NA>
08049335 4 2 1 5 8 7 9 3
07668511 5 2 7 <NA> <NA> <NA> <NA> <NA>
20058102 7 4 2 <NA> <NA> <NA> <NA> <NA>
17318802 6 3 5 1 9 8 2 <NA>
其中包含可在此数据框中找到的10个可能值的列表。
我需要创建另一个数据帧,该数据帧将包含10个列,每个列对应列表中的每个值,并与原始数据帧匹配。
新数据框应如下所示:
id c1 c2 c3 c4 c5 c6 c7 c8 c9 c10
20764422 y n y n n n n n n n
08049335 y y y y y n y y y n
07668511 n y n n y n y n n n
20058102 n y n y n n y n n n
17318802 y y y n y y n y y n
其中每一行(c1-c10)应与值列表中的一个值匹配。价值观&#34; y&#34;和&#34; n&#34;对于每个id,意味着某些值在原始数据框中不存在。
希望这种说法能够很好地理解需要做什么。
我在发帖前试图找到答案,但要么没有答案,要么我的搜索不够好。无论如何,对不起,如果我发布了这里已有的答案。
提前致谢!
答案 0 :(得分:1)
我们可以使用mtabulate
library(qdapTools)
cbind(dfN[1], mtabulate(as.data.frame(t(dfN[-1]))))
或使用table
中的base R
。我们unlist
数据集的列除了&#39; id&#39;栏,获取table
的&#39; id&#39;列(复制以使长度相同)和unlist
ed列,将逻辑索引更改为数字,将值替换为&#39; n&#39;,&#39; y&#39;和cbind
使用&#39; id&#39;列。
tbl <- !!table(dfN$id[row(dfN[-1])], factor(unlist(dfN[-1]), levels=1:10))
tbl[] <- c('n', 'y')[tbl+1L]
`row.names<-`(cbind(dfN[1], as.data.frame.matrix(tbl)), NULL)
# id 1 2 3 4 5 6 7 8 9 10
#1 20764422 n y n n y n y n n n
#2 8049335 y y y y y n y y y n
#3 7668511 y y y n y y n y y n
#4 20058102 n y n y n n y n n n
#5 17318802 y n y n n n n n n n