如何使用datatable将矩阵文本文件读入r
我在读取数据格式为矩阵格式的文本文件时遇到问题,如下所示:如何使用datatable将矩阵文本文件读入r,r,read.table,R,Read.table,我在读取数据格式为矩阵格式的文本文件时遇到问题,如下所示: Location Product Day1 Day2 Day3 Day4 ... Day1 Day2 Day3 Jan Jan Jan ... Feb Feb Feb 123 23 8 9 3 234 25 2 4 9 254
Location Product Day1 Day2 Day3 Day4 ... Day1 Day2 Day3
Jan Jan Jan ... Feb Feb Feb
123 23 8 9 3
234 25 2 4 9
254 87 3
213 56 7 5
它本质上是一个时间序列,每天按地点显示产品数量。我希望最终将其转换为“sql”表格式
我的问题是,当我试图跳过第2行并使用fill=TRUE
导入其余数据时,我没有得到想要的结果。实际计数向右移动,与第一个“标题”行不对齐。我想将第1行和第2行组合在一起,在第1行中创建一个从第1天开始的日期字段,然后将空字段保留为null或NA。然后最终将此数据转换为以下格式:
Location Product Period Count
123 23 Jan 1
234 25 Jan 1 5
234 25 Feb 3 9
如何实现这一点?这演示了pkg:
readr
的自动位置猜测功能,fwf_empty
。我无法让read_fwf
-函数接受文件
参数的文本连接参数,因此需要将文本保存为稍微编辑的版本,如下所示:
Location Product Day1 Day2 Day3 Day4 Day1 Day2 Day3
Jan Jan Jan Jan Feb Feb Feb
123 23 8 9 3
234 25 2 4 9
254 87 3
213 56 7 5
R代码:
require(readr)
fwf_empty(file="~/Untitled 4 copy.txt")
$begin
[1] 0 9 17 22 27 32 40
$end
[1] 8 16 21 26 31 36 55
$col_names
[1] "X1" "X2" "X3" "X4" "X5" "X6" "X7"
> read_fwf(file="~/Untitled 4 copy.txt", fwf_empty(file="~/Untitled 4 copy.txt"))
Warning: 8 parsing failures.
row col expected actual
2 X9 4 chars 3
3 X8 4 chars 2
3 -- 9 columns 8 columns
4 X9 4 chars 3
5 X3 4 chars 2
... ... ......... .........
.See problems(...) for more details.
X1 X2 X3 X4 X5 X6 X7 X8 X9
1 Location Product Day1 Day2 Day3 Day4 Day1 Day2 Day3
2 <NA> <NA> Jan Jan Jan Jan Feb Feb Feb
3 123 23 <NA> <NA> 8 <NA> 9 3 <NA>
4 234 25 2 4 <NA> <NA> <NA> <NA> 9
5 254 87 3 <NA> <NA> <NA> <NA> <NA> <NA>
6 213 56 <NA> 7 <NA> <NA> 5 <NA> <NA>
require(readr)
fwf_为空(文件=“~/Untitled 4 copy.txt”)
$begin
[1] 0 9 17 22 27 32 40
$end
[1] 8 16 21 26 31 36 55
$colu名称
[1] “X1”“X2”“X3”“X4”“X5”“X6”“X7”
>read_fwf(file=“~/Untitled 4 copy.txt”,fwf_empty(file=“~/Untitled 4 copy.txt”))
警告:8次解析失败。
行col预期实际值
2 x 9 4个字符3
3 X8 4字符2
3-9列8列
4 x 9 4个字符3
5 x 3 4个字符2
... ... ......... .........
。有关详细信息,请参阅问题(…)。
X1 X2 X3 X4 X5 X6 X7 X8 X9
1地点产品第1天第2天第3天第4天第1天第2天第3天
一月二月二日
3 123 23 8 9 3
4 234 25 2 4 9
5 254 87 3
6 213 56 7 5
然后重命名列并删除前两行:
> colnm <- paste0( inp[1,], inp[2,])
> colnm
[1] "LocationNA" "ProductNA" "Day1Jan" "Day2Jan" "Day3Jan"
[6] "Day4Jan" "Day1Feb" "Day2Feb" "Day3Feb"
> colnames(inp) <- colnm
> inp[-(1:2), ]
LocationNA ProductNA Day1Jan Day2Jan Day3Jan Day4Jan Day1Feb Day2Feb
3 123 23 <NA> <NA> 8 <NA> 9 3
4 234 25 2 4 <NA> <NA> <NA> <NA>
5 254 87 3 <NA> <NA> <NA> <NA> <NA>
6 213 56 <NA> 7 <NA> <NA> 5 <NA>
Day3Feb
3 <NA>
4 9
5 <NA>
6 <NA>
>colnm colnm
[1] “地点”“产品”“日期1月”“日期2月”“日期3月”
[6] “1月4日”“1月4日”“2月2日”“2月3日”
>colnames(inp)inp[-(1:2),]
地点产品日期1月1日1月2日3月1日4月1日1月1日2日
3 123 23 8 9 3
4 234 25 2 4
5 254 87 3
6 213 56 7 5
二月三日
3.
4 9
5.
6.
使用read.fwf
。(不确定data.table的fread
是否有这样的功能,尽管我认为dplyr有一个read_fwf
)@42-我不知道;from?fread
:“fread”表示常规分隔文件;i、 例如,每一行都有相同数量的列&我想read_fwf
来自readr包,谢谢您的更正。我想所有的新东西都在dplyr中。@42-不,我怀疑Hadley喜欢混淆人们:readr带有标准read.*
函数的替换函数,readxl用于读取excel文件,haven用于读取其他统计软件包中的文件;我的想法是:为什么是3个包裹?为什么不是只有一个呢?我尝试了以下方法并得到了奇数输出:cjcombo=read.fwf('xxx.txt',widths=c(122120122122),header=FALSE#,sep=“\t”,skip=0,n=5)