为了账号安全,请及时绑定邮箱和手机立即绑定

将一列拆分为多个二进制伪列

将一列拆分为多个二进制伪列

海绵宝宝撒 2019-12-06 10:51:34
我正在尝试将数据框中的单个“字符”变量拆分为多个“因子”变量。> sampledf=data.frame(vin=c('v1','v2','v3'),features=c('f1:f2:f3','f2:f4:f5','f1:f4:f5'))> sampledf  vin features1  v1 f1:f2:f32  v2 f2:f4:f53  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 f51  v1  1  1  1  0  02  v2  0  1  0  1  13  v3  1  0  0  1  1我尝试使用strsplit()分隔“功能”列strsplit(as.character(df$features), ";") 但是没有运气可以分解它们。
查看完整描述

1 回答

?
噜噜哒

TA贡献1784条经验 获得超7个赞

我们可以使用mtabulate从qdapTools拆分后(strsplit(..)的“功能”一栏。


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

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


library(splitstackshape)

df1 <- cSplit_e(sampledf, 'features', ':', type= 'character', fill=0, drop=TRUE)

names(df1) <-  sub('.*_', '', names(df1))

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


cbind(sampledf[1],  

 t(table(stack(setNames(strsplit(as.character(sampledf$features), ':'), 

              sampledf$vin)))))


查看完整回答
反对 回复 2019-12-06
  • 1 回答
  • 0 关注
  • 428 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信