Comme il est indiqué ci-dessus, la réponse varie selon que le nombre de séparateurs dans les colonnes sont cohérentes ou non. La réponse est plus directe si ce nombre est cohérent. Voilà une réponse à faire ce bâtiment hors de strsplit
réponse Andrie:
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
Notez que ce qui précède est essentiellement la façon dont colsplit.character
du paquet reshape
est mis en œuvre et peut-être une meilleure option pour vous car il vous oblige à donner des noms propres.
Si le nombre de séparateurs est différent, l'utilisation de rbind.fill
est une option du package plyr
. rbind.fill
s'attend à ce que data.frame soit un peu ennuyeux, et je n'arrive pas à comprendre comment obtenir un data.frame à une ligne sans d'abord convertir en matrice, donc j'imagine que cela peut être rendu plus efficace, mais voici l'idée de base:
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
Qui peut alors être cbind
comme indiqué ci-dessus.
La troisième colonne aura-t-elle toujours trois nombres séparés par des deux-points? Ou peut-il en avoir plus de trois? –
il peut avoir plus de 3 nombres parfois – damola
Voir ma réponse pour différents nombres de ':'. Vous pouvez également utiliser un autre outil de prétraitement pour gérer cela comme 'sed' ou' awk' si un système d'exploitation * nix est dans votre arsenal. – Chase