Как отмечено выше, ответ будет варьироваться в зависимости от того, является ли количество разделителей в столбцах постоянным или нет. Ответ будет более прямым, если это число соответствует. Вот один ответ, чтобы сделать это здание из ответа strsplit
Андри:
dat <- read.csv("yourData.csv", header=FALSE, stringsAsFactors = FALSE)
#If always going to be a consistent number of separators
dat <- cbind(dat, do.call("rbind", strsplit(dat[, 3], ":")))
V1 V2 V3 V4 1 2 3
1 Deamon Host 1:02:04 aaa.03 1 02 04
2 Pixe Paradigm 1:03:05 11.us 1 03 05
Обратите внимание, что вышеизложенное по сути представляет собой способ реализации colsplit.character
из пакета reshape
и может быть лучшим вариантом для вас, так как заставляет вас давать правильные имена.
Если количество разделителей отличается, тогда использование rbind.fill
является опцией из пакета plyr
. rbind.fill
ожидает data.frames, что немного раздражает, и я не мог понять, как получить data.frame из одной строки без предварительного преобразования в матрицу, поэтому я думаю, что это можно сделать более эффективным, но вот основные идея:
library(plyr)
x <- c("1:2:4", "1:3:5:6:7")
rbind.fill(
lapply(
lapply(strsplit(x, ":"), matrix, nrow = 1)
, as.data.frame)
)
V1 V2 V3 V4 V5
1 1 2 4 <NA> <NA>
2 1 3 5 6 7
Который затем может быть cbind
ed, как показано выше.