根据另一个数据框中的值创建新数据框

时间:2015-11-23 12:07:30

标签: r dataframe data.table

数据框如下所示:

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,意味着某些值在原始数据框中不存在。

希望这种说法能够很好地理解需要做什么。

我在发帖前试图找到答案,但要么没有答案,要么我的搜索不够好。无论如何,对不起,如果我发布了这里已有的答案。

提前致谢!

1 个答案:

答案 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