R:拆分字符列并创建两个新的
Posted
技术标签:
【中文标题】R:拆分字符列并创建两个新的【英文标题】:R: Split character column and create two new ones 【发布时间】:2018-08-10 22:57:49 【问题描述】: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
【问题讨论】:
仅供参考,这是一个字符矩阵,而不是数据框,如class(df)
所示
【参考方案1】:
我们可以通过分隔符 ,
执行 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
【讨论】:
【参考方案2】:使用 tidyr 库:
library(tidyr)
df <- as.data.frame(rbind(a,b,c), stringsAsFactors=F)
separate(df, V1, c("name", "age"),sep = ",")
【讨论】:
【参考方案3】:只需通过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
【讨论】:
【参考方案4】:# 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)
【讨论】:
虽然此代码 sn-p 可能是解决方案,但 including an explanation 确实有助于提高您的帖子质量。请记住,您是在为将来的读者回答问题,而这些人可能不知道您提出代码建议的原因。 @NarendraJadhav 感谢您的建议。下次我会添加更多解释。我不是 Stack Overflow 的新手,但我是贡献者的新手。以上是关于R:拆分字符列并创建两个新的的主要内容,如果未能解决你的问题,请参考以下文章