R:拆分字符列并创建两个新列
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,使每个列
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)