Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/70.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用datatable将矩阵文本文件读入r_R_Read.table - Fatal编程技术网

如何使用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)