r - 将一列拆分为多个 R 并在为真时给出逻辑值

标签 r reshape reshape2 strsplit 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

并希望将其扩展为宽格式,例如带有 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  

我研究了 tidyrseparate 函数以及 reshape2cast 函数,但似乎越来越挂断了给出逻辑值。对此问题的任何帮助将不胜感激。谢谢。

最佳答案

您可以尝试 splitstackshape 包中的 cSplit_e:

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

关于r - 将一列拆分为多个 R 并在为真时给出逻辑值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28077206/

相关文章:

java - 如何在java中使用R模型来预测多个模型?

arrays - 在 MATLAB 中用一个命令选择子矩阵并进行矢量化

r - R 长形式的 PCA

r - Crosstable 类似于 R 中的 Stata

R - 用变量对重新组织一个熔化的 data.frame

r - 无法转换包含数据帧的列表

r - 运行 Rscript 与源代码的差异输出

r - 在 docker 中挂载 R/RStudio 可以访问的本地卷 (tidyverse)

通过使用 R 中的 2 个公共(public)列将 df2 中的错误值替换为 df1 中的真实值

在 R 中使用 sum+product 进行重铸