我正在尝试将数据框中的单个字符变量拆分为多个因子变量。
I'm trying to split a single "character" variable in my dataframe into mutiple "factor" variables.
> 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), ";"),但是没有运气来分解它们。
but have had no luck factorising them.
推荐答案我们可以在拆分后使用 mtabulate 从 qdapTools ( strsplit(.. code>)功能列。
We can use mtabulate from qdapTools after splitting (strsplit(..) the 'features' column.
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 来自库(splitstackshape)
Or we can use cSplit_e from library(splitstackshape)
library(splitstackshape) df1 <- cSplit_e(sampledf, 'features', ':', type= 'character', fill=0, drop=TRUE) names(df1) <- sub('.*_', '', names(df1))或者使用 base R 方法,我们分割和以前一样,使用 Or using base R methods, we split as before, set the names of the list elements from the strsplit with 'vin' column, convert to a key/value columns 'data.frame' using stack, get the table, transpose and cbind with the first column of 'sampledf'.
更多推荐
将一列拆分为多个二进制伪列
发布评论