我有一个字符串列表,我想将其转换为数据帧。我想根据一些固定的长度划分每个字符串,例如,假设我的列表看起来像:
text = c("ABC ABC BROWNIES COMPANY 1/31/2009",
"BCD BCD BROWNIES COMPANY 1/31/2009")
我希望将其转换为使用的数据框:
FINAL <- data.frame(rbind(c("ABC", "ABC BROWNIES COMPANY","1/31/2009"),c("BCD", "BCD BROWNIES COMPANY","1/31/2009")),stringsAsFactors = F)
colnames(FINAL) = c("Ticker","Company","Date")
FINAL
基本上我想引入某种固定长度分隔来分隔“text”的每个元素中的项目。 我不认为我可以使用strsplit,因为我没有一个字符可以拆分(空格不起作用,因为我的一些条目包含空格,并且“Ticker”到“Company”有不均匀的空格, “公司”至“日期”)。
非常感谢任何帮助!
答案 0 :(得分:3)
由于您提到了固定长度分隔符,因此可以尝试read.fwf
。
read.fwf(textConnection(text), widths = c(3, 21, 13),
col.names = c("Ticker", "Company", "Date"))
# Ticker Company Date
# 1 ABC ABC BROWNIES COMPANY 1/31/2009
# 2 BCD BCD BROWNIES COMPANY 1/31/2009
您可以使用中间21
值来处理所有数据。
另一种可能性是分成三个或更多空格。
data.frame(do.call(rbind, strsplit(text, " {3,}")))
# X1 X2 X3
# 1 ABC ABC BROWNIES COMPANY 1/31/2009
# 2 BCD BCD BROWNIES COMPANY 1/31/2009
答案 1 :(得分:1)
使用read.fwf或用分隔符替换长跨度的空格。
> read.table( text=gsub(" {3,10}", ",", text), sep="," )
V1 V2 V3
1 ABC ABC BROWNIES COMPANY 1/31/2009
2 BCD BCD BROWNIES COMPANY 1/31/2009
答案 2 :(得分:0)
str_split_fixed
可能stringr
:
library(stringr)
##
Df <- data.frame(
str_split_fixed(text,pattern="\\s{2,}",3),
stringsAsFactors=F)
##
names(Df) <- c("Ticker","Company","Date")
##
> Df
Ticker Company Date
1 ABC ABC BROWNIES COMPANY 1/31/2009
2 BCD BCD BROWNIES COMPANY 1/31/2009
> str(Df)
'data.frame': 2 obs. of 3 variables:
$ Ticker : chr "ABC" "BCD"
$ Company: chr "ABC BROWNIES COMPANY" "BCD BROWNIES COMPANY"
$ Date : chr "1/31/2009" "1/31/2009"
假设2个或更多连续的空格表示新列;虽然如有必要可以调整。