【问题标题】:Split a column into multiple binary dummy columns [duplicate]将一列拆分为多个二进制虚拟列[重复]
【发布时间】:2015-10-06 19:52:49
【问题描述】:

我正在尝试将数据框中的单个“字符”变量拆分为多个“因子”变量。

> sampledf=data.frame(vin=c('v1','v2','v3'),features=c('f1:f2:f3','f2:f4:f5','f1:f4:f5'))
> sampledf
  vin features
1  v1 f1:f2:f3
2  v2 f2:f4:f5
3  v3 f1:f4:f5

> desireddf=data.frame(vin=c('v1','v2','v3'),f1=c(1,0,1),f2=c(1,1,0),f3=c(1,0,0),f4=c(0,1,1),f5=c(0,1,1))
> desireddf
  vin f1 f2 f3 f4 f5
1  v1  1  1  1  0  0
2  v2  0  1  0  1  1
3  v3  1  0  0  1  1

我尝试使用strsplit() 来分隔“功能”列

strsplit(as.character(df$features), ";") 

但没有运气分解它们。

【问题讨论】:

    标签: r dataframe


    【解决方案1】:

    在拆分 (strsplit(..) 'features' 列后,我们可以使用 qdapTools 中的 mtabulate

    library(qdapTools)
    cbind(sampledf[1],mtabulate(strsplit(as.character(sampledf$features), ':')))
    #  vin f1 f2 f3 f4 f5
    #1  v1  1  1  1  0  0
    #2  v2  0  1  0  1  1
    #3  v3  1  0  0  1  1
    

    或者我们可以使用来自library(splitstackshape)cSplit_e

    library(splitstackshape)
    df1 <- cSplit_e(sampledf, 'features', ':', type= 'character', fill=0, drop=TRUE)
    names(df1) <-  sub('.*_', '', names(df1))
    

    或者使用base R 方法,我们像以前一样split,将strsplit 中的list 元素的名称设置为'vin' 列,转换为键/值列'data.frame' 使用stack,得到table,转置和cbind,第一列是'sampledf'。

    cbind(sampledf[1],  
     t(table(stack(setNames(strsplit(as.character(sampledf$features), ':'), 
                  sampledf$vin)))))
    

    【讨论】:

    • 他们完美地工作 akrun!但是有没有办法使用基函数来做到这一点?
    • @outlier123 添加了基本 R 选项。
    • 太棒了!非常感谢阿克伦!! (代表太低,无法公开投票)
    猜你喜欢
    • 2021-05-02
    • 1970-01-01
    • 1970-01-01
    • 2015-05-27
    • 1970-01-01
    • 2015-07-11
    • 2017-03-28
    • 2019-03-14
    相关资源
    最近更新 更多