如果为真,则将一列拆分为多个R并提供逻辑值

Bra*_*rad 3 r strsplit reshape reshape2 tidyr

我试图将数据框中的一列拆分为多个列,这些列将原始列中的值保存为新列名.然后,如果原始中的相应列出现,则在新列中为1,如果不匹配则为0.我意识到这不是最好的解释方式,例如:

df <- data.frame(subject = c(1:4), Location = c('A', 'A/B', 'B/C/D', 'A/B/C/D'))  

#   subject Location  
# 1       1     A                                  
# 2       2     A/B                                   
# 3       3     B/C/D                                 
# 4       4     A/B/C/D
Run Code Online (Sandbox Code Playgroud)

并希望将其扩展为宽格式,例如1和0(或T和F):

#   subject    A  B  C  D
# 1       1    1  0  0  0
# 2       2    1  1  0  0
# 3       3    0  1  1  1
# 4       4    1  1  1  1  
Run Code Online (Sandbox Code Playgroud)

我已经调查tidyrseparate功能,reshape2cast功能,但似乎越来越挂了给逻辑值.任何有关该问题的帮助将不胜感激.谢谢.

Hen*_*rik 5

你可以尝试cSplit_e从包splitstackshape:

library(splitstackshape)
cSplit_e(data = df, split.col = "Location", sep = "/",
         type = "character", drop = TRUE, fill = 0)
#   subject Location_A Location_B Location_C Location_D
# 1       1          1          0          0          0
# 2       2          1          1          0          0
# 3       3          0          1          1          1
# 4       4          1          1          1          1
Run Code Online (Sandbox Code Playgroud)