Пользователи R
У меня есть фрейм данных, подобный этому:
a <- c("John, 3 years")
b <- c("Mokobe, 11 years")
c <- c("Ivan")
df <- rbind(a,b,c)
df
[,1]
a "John, 3 years"
b "Mokobe, 11 years"
c "Ivan"
Какую функцию следует использовать для разделения столбца после запятой, чтобы получить:
df
[,1] [,2]
John 3 years
Mokobe 11 years
Ivan NA





мы можем сделать strsplit с помощью разделителя ,, а затем rbind элементов list после заполнения с помощью NA в конце, чтобы сделать length одинаковым для каждого элемента list
lst <- strsplit(df[,1], ", ")
do.call(rbind, lapply(lst, `length<-`, max(lengths(lst))))
# [,1] [,2]
#a "John" "3 years"
#b "Mokobe" "11 years"
#c "Ivan" NA
с библиотекой tidyr:
library(tidyr)
df <- as.data.frame(rbind(a,b,c), stringsAsFactors=F)
separate(df, V1, c("name", "age"),sep = ",")
Просто прочтите данные напрямую с read.csv с fill=TRUE и header=FALSE. вы можете решить поменять его на матрицу с помощью as.matrix()
read.csv(text=df,fill=T,header=F,na.strings = "")
V1 V2
1 John 3 years
2 Mokobe 11 years
3 Ivan <NA>
Переходя к матрице. Хотя не обязательно
as.matrix(read.csv(text=df,fill=1,h=0,na.strings = ""))
V1 V2
[1,] "John" " 3 years"
[2,] "Mokobe" " 11 years"
[3,] "Ivan" NA
# This should work
library(stringr)
a <- c("John, 3 years")
b <- c("Mokobe, 11 years")
c <- c("Ivan")
df<- rbind(a,b,c)
df<- str_split_fixed(df, ",", 2)
Хотя этот фрагмент кода может быть решением, включая объяснение действительно помогает улучшить качество вашего сообщения. Помните, что вы отвечаете на вопрос для читателей в будущем, и эти люди могут не знать причины вашего предложения кода.
@NarendraJadhav Спасибо за совет. Я добавлю больше объяснений в следующий раз. Я не новичок в переполнении стека, но я новичок в участии.
К вашему сведению, это матрица символов, а не фрейм данных, как указано в
class(df).