R 基于列名将字符矩阵转换为真/假矩阵

R 基于列名将字符矩阵转换为真/假矩阵,r,R,我有一个以下格式的数据框 1 2 a b c 1 a b 0 0 0 2 b 0 0 0 3 c 0 0 0 我想用真/假来填充a到c列,说明列名是在第1列还是第2列 1 2 a b c 1 a b 1 1 0 2 b 0 1 0 3 c 0 0 1 我有一个大约530000条记录、4个描述列和95个输出列的数据集,因此for循环不起作用。我尝试过以下格式的代码,但太耗时了: > for(i in 3:5) { >

我有一个以下格式的数据框

    1 2 a b c
1   a b 0 0 0
2   b   0 0 0
3   c   0 0 0
我想用真/假来填充a到c列,说明列名是在第1列还是第2列

    1 2 a b c
1   a b 1 1 0
2   b   0 1 0
3   c   0 0 1
我有一个大约530000条记录、4个描述列和95个输出列的数据集,因此for循环不起作用。我尝试过以下格式的代码,但太耗时了:

> for(i in 3:5) {   
>   for(j in 1:3) {
>     for(k in 1:2){
>       if(df[j,k]==colnames(df)[i]) df[j, i]=1
>     }   
>   } 
> }
是否有更简单、更有效的方法来实现相同的输出


提前谢谢

一个选项是
qdapTools

library(qdapTools)
df1[-(1:2)] <- mtabulate(as.data.frame(t(df1[1:2])))[-3]
df1
#  1 2 a b c
#1 a b 1 1 0
#2 b   0 1 0
#3 c   0 0 1
或者我们可以“粘贴”前两列并使用
cSplit\u e
获取二进制格式

library(splitstackshape)
cbind(df1[1:2], cSplit_e(as.data.table(do.call(paste, df1[1:2])),
                   'V1', ' ', type='character', fill=0, drop=TRUE))
数据
df1感谢您及时、全面的回复。对于如此大的数据集,“熔化”选项的运行速度令人难以置信。
library(splitstackshape)
cbind(df1[1:2], cSplit_e(as.data.table(do.call(paste, df1[1:2])),
                   'V1', ' ', type='character', fill=0, drop=TRUE))
df1 <- structure(list(`1` = c("a", "b", "c"), `2` = c("b", "", ""), 
a = c(0L, 0L, 0L), b = c(0L, 0L, 0L), c = c(0L, 0L, 0L)), .Names = c("1", 
"2", "a", "b", "c"), class = "data.frame", row.names = c("1", 
"2", "3"))