Разделить столбец разделителем '+' с помощью R - PullRequest
0 голосов
/ 03 июля 2018

Например я получил:

V1 <- c("apple + orange + banana","apple+green + orange + banana")
#careful, there is no space in "apple+green"
data <- data.frame(V1) 
                             V1
1       apple + orange + banana
2 apple+green + orange + banana

И я хотел бы получить такой тип данных:

data_final 

              V1     V2       V3
    1       apple  orange  banana
    2 apple+green  orange  banana

Я пробовал с strsplit :

strsplit(as.character(data$V1), ' +', fixed=TRUE)

Я добавил пробел из-за строки "яблоко + зеленый". Но результат дал мне столбец, составленный из списка. И я хочу, чтобы датафрейм

Не могли бы вы мне помочь?

Ответы [ 4 ]

0 голосов
/ 03 июля 2018

A base R опция с read.csv

read.csv(text= gsub(" \\+ ", ",", data$V1), header = FALSE)
#         V1     V2     V3
#1       apple orange banana
#2 apple+green orange banana
0 голосов
/ 03 июля 2018

Вы также можете попробовать это с splitstackshape package:

library(splitstackshape)
x <- cSplit(data, 'V1', ' + ')

Результат:

          V1_1   V1_2   V1_3
1:       apple orange banana
2: apple+green orange banana
0 голосов
/ 03 июля 2018

Для полноты, вот опция tidyverse, которая использует separate из tidyr

library(tidyr)
separate(data, col = V1, sep = " \\+ ", into = c("V1", "V2", "V3"))
#           V1     V2     V3
#1       apple orange banana
#2 apple+green orange banana

Аргумент sep интерпретируется как регулярное выражение, если оно является символом, поэтому нам нужно экранировать +.

0 голосов
/ 03 июля 2018

Попробуйте это:

do.call(rbind, strsplit(as.character(data$V1), ' + ', fixed = TRUE))
#      [,1]          [,2]     [,3]    
# [1,] "apple"       "orange" "banana"
# [2,] "apple+green" "orange" "banana"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...