R:拆分字符列并创建两个新列

R:拆分字符列并创建两个新列,r,dataframe,character,na,comma,R,Dataframe,Character,Na,Comma,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" 我们可以通过分隔符,执行strsplit,然后rbind在末尾填充NA后,对列表元素执行strsplit,使每个列

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" 

我们可以通过分隔符
执行
strsplit
,然后
rbind
在末尾填充
NA
后,对
列表
元素执行
strsplit
,使每个
列表
元素的
长度
相同

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       

lst我们可以通过分隔符
进行
strsplit
,然后
rbind
在末尾用
NA
填充
列表
元素,使每个
列表
元素的
长度相同

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       

lst带tidyr库:

library(tidyr)
df <- as.data.frame(rbind(a,b,c), stringsAsFactors=F)
separate(df, V1, c("name", "age"),sep = ",")
library(tidyr)

df与tidyr库:

library(tidyr)
df <- as.data.frame(rbind(a,b,c), stringsAsFactors=F)
separate(df, V1, c("name", "age"),sep = ",")
library(tidyr)

df只需通过
read.csv
直接读取数据,使用
fill=TRUE
header=FALSE
。您可以通过
as.matrix()


只需通过
read.csv
直接读取数据,使用
fill=TRUE
header=FALSE
。您可以通过
as.matrix()

#这应该行得通
图书馆(stringr)
这应该行得通
图书馆(stringr)

虽然这段代码片段可能是解决方案,但它确实有助于提高文章的质量。请记住,您将在将来回答读者的问题,而这些人可能不知道您的代码建议的原因。@Narendrajadv感谢您的建议。下次我会补充更多的解释。我对堆栈溢出并不陌生,但我对贡献并不陌生。虽然这个代码片段可能是解决方案,但确实有助于提高您的文章质量。请记住,您将在将来回答读者的问题,而这些人可能不知道您的代码建议的原因。@Narendrajadv感谢您的建议。下次我会补充更多的解释。我对堆栈溢出并不陌生,但我对贡献并不陌生。仅供参考,这是字符矩阵,不是数据帧,如
class(df)
FYI所示,这是字符矩阵,不是数据帧,如
class(df)
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)