我试图分裂一个"字符"我的数据框中的变量变为多个因素"变量。
> 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), ";")
但没有运气因素。
答案 0 :(得分:9)
我们可以在分割(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
和以前一样,设置list
中strsplit
元素的名称与&#39; vin&#39;列,转换为键/值列&quot; data.frame&#39;使用stack
,获取table
,转置和cbind
第一列&#39; samplesf&#39;。
cbind(sampledf[1],
t(table(stack(setNames(strsplit(as.character(sampledf$features), ':'),
sampledf$vin)))))