我的数据框看起来像
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
我想将第V3-V8列分开
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
我该怎么办?
答案 0 :(得分:3)
使用基本R方法(但比@akruns回答更复杂):
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)
这导致:
> 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
仅使用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)
答案 1 :(得分:1)
我们可以使用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