2017-01-23 1 views
-2

私は多くの列を分割する方法は?

V1 V2 V3 V4 V5  V6 V7 V8 
0 Tri1 D D D D D D D D D D D D 
0 Tri2 D D D D D D D D D D D D 
0 Tri3 D D D D D D D D D D D D 
0 Tri4 D D D D D D D D D D D D 
0 Tri5 D D D D D D D D D D D D 

のように見えると私は、私はそれをどのように行うことが

V1 V2 V3 V4 V5 V6 V7 V8 V9 V10 V11 V12V13V14 
0 Tri1 D D D D D D D D D D D D 
0 Tri2 D D D D D D D D D D D D 
0 Tri3 D D D D D D D D D D D D 
0 Tri4 D D D D D D D D D D D D 
0 Tri5 D D D D D D D D D D D D 

列V3-V8を分割したいデータフレームを持っていますか?

+0

あなたは 'strsplit'を探しています。 – lmo

+4

なぜですか?違いはなんですか?あなたが提供した答えは私の偽装ターゲットの答えとして存在します – Sotos

+4

@akrunどのようなロジックですか?あなたが言及したのは、データフレームではなく、ネストされたリストであった間に、長いものから広いものへのDATAFRAMESの形をとったものです。それで、それは正しく再開されました... IMO。これは、より多くの列のためにそれを行う以外の違いを見ることができません – Sotos

答えて

1

我々は基本R法でcSplit

library(splitstackshape) 
setnames(cSplit(df, 3:8, " "), paste0("V", 1:14))[] 
# V1 V2 V3 V4 V5 V6 V7 V8 V9 V10 V11 V12 V13 V14 
#1: 0 Tri1 D D D D D D D D D D D D 
#2: 0 Tri2 D D D D D D D D D D D D 
#3: 0 Tri3 D D D D D D D D D D D D 
#4: 0 Tri4 D D D D D D D D D D D D 
#5: 0 Tri5 D D D D D D D D D D D D 
3

でこれを行う(ただし、@akruns答えよりも複雑)することができます

> dat2 
    V1 V2 V3 V4 V5 V6 V7 V8 V9 V10 V11 V12 V13 V14 
1 0 Tri1 D A D D D D D D D D D D 
2 0 Tri2 D B D D D D D D D D D D 
3 0 Tri3 D C D D D D D D D D D D 
4 0 Tri4 D D D D D D D D D D D D 
5 0 Tri5 D E D D D D D D D D D D 

付:

lst.1 <- lapply(dat[3:8], strsplit, ' ') 
lst.2 <- lapply(lst, function(x) matrix(unlist(x), ncol = 2, byrow = TRUE)) 
dat2 <- data.frame(dat[1:2], do.call(cbind, lst.2)) 
names(dat2) <- paste0('V',1:14) 

これは、その結果Dは、メソッドが機能するかどうかを調べるのが難しいと評価します。その理由のために、私は幾分変更されたデータを使用しました:

dat <- read.table(text="V1,V2,V3,V4,V5,V6,V7,V8 
0,Tri1,D A,D D,D D,D D,D D,D D 
0,Tri2,D B,D D,D D,D D,D D,D D 
0,Tri3,D C,D D,D D,D D,D D,D D 
0,Tri4,D D,D D,D D,D D,D D,D D 
0,Tri5,D E,D D,D D,D D,D D,D D", header = TRUE, sep = ',', stringsAsFactors = FALSE) 
関連する問題