亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

將一列拆分為多個二進制偽列

將一列拆分為多個二進制偽列

海綿寶寶撒 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 關注
  • 467 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號