Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/79.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
解析Thorn“þ&引用;r中的分隔日志文件_R - Fatal编程技术网

解析Thorn“þ&引用;r中的分隔日志文件

解析Thorn“þ&引用;r中的分隔日志文件,r,R,我正在尝试读取以thorn分隔的csv文件(最初是扩展名已更改的日志文件) 无论多么简单,readLines或read.delim都不要将“þ”作为分隔符,默认函数会产生一列data.frame 当我试图打印数据帧时,我得到: temp <- readLines("sample.csv") temp [1] "12-31-2014-21:01:11þ0þþ4382037þ8048852þ286809041þ60534606þ1þ0x0þ1594842þ107607879þþ256þMDþ

我正在尝试读取以thorn分隔的csv文件(最初是扩展名已更改的日志文件)

无论多么简单,
readLines
read.delim
都不要将“þ”作为分隔符,默认函数会产生一列data.frame

当我试图打印数据帧时,我得到:

temp <- readLines("sample.csv")
temp

[1] "12-31-2014-21:01:11þ0þþ4382037þ8048852þ286809041þ60534606þ1þ0x0þ1594842þ107607879þþ256þMDþ28þ0.0þ22þ13þ14915þ20646þþ1420088471"                     
[2] "12-31-2014-21:01:16þ0þþ4382037þ8048852þ286810825þ60533173þ1þ160x600þ1594842þ107606862þþ256þMDþ28þ0.0þ22þ13þ14915þ20646þþ1420088476"                 
[3] "12-31-2014-21:13:24þ0þþ4382037þ8048852þ286811019þ60532482þ1þ728x90þ1594842þ107607879þþ256þAZþ27þ0.0þ7þ189þ13541þ85747þþ1420089204"                  
[4] "12-31-2014-21:35:04þ2453419343309111450þþ4479850þ8209375þ283421530þ58729626þ1þ1x2þ1685249þ110242400þþ256þCOþ5þ9.0þ22þ171þ14885þ80120þþ1420090504"   
[5] "12-31-2014-21:07:22þ2453942989496582297þþ4382037þ8048852þ284408073þ59306057þ1þ728x90þ1594842þ107607879þþ256þGAþ26þ0.0þ22þ26þ14981þ30093þþ1420088842"
或者
gsub(“þ”,temp)
只返回原始打印

这变得更加“奇怪”,因为如果我从控制台复制并粘贴一行,然后运行:

temp1 <- "12-31-2014-21:01:11þ0þþ4382037þ8048852þ286809041þ60534606þ1þ0x0þ1594842þ107607879þþ256þMDþ28þ0.0þ22þ13þ14915þ20646þþ1420088471"
我的最终目标是得到这个解析:一个包含22个不同列的数据帧

我已将此“sample.cav”文件加载到以下链接:

我添加这个链接是因为我担心使用网站上的复制粘贴只会产生我得到的最终结果,所以为了重现这个问题,需要下载文件(只有这5行)

补充说明:

  • 我用的是windows电脑

  • Excel工具“文本到列”成功地解析了这一点,但是我有多个文件太大,Excel无法处理,我希望在r中继续我的分析

  • 任何帮助都将不胜感激!
    谢谢大家

    您有几个选择

    首先,您可以将分隔符的unicode表示形式与内置的
    read.csv
    一起使用,这样就可以正常工作了:

    read.csv("sample.csv", sep="\xfe", header=FALSE)
    
    您还可以使用具有相同参数的内置
    read.delim

    哈德利新的
    readr
    软件包也有一个有效的
    read\u delim
    ,但它在
    V22
    列中添加了一个
    \r
    (什么是
    X22
    来自
    read.csv
    ):

    来自
    数据的快速
    fread
    。表
    也起作用:

    library(data.table)
    fread("sample.csv", sep="\xfe")
    
    最后,您可以使用
    strsplit
    rbind.data.frame

    do.call(rbind.data.frame, 
            strsplit(readLines("sample.csv"), "\xfe", useBytes=TRUE, fixed=TRUE))
    

    但您需要设置正确的列名,并在事后转换为可用类型。

    readr::read_delim(“sample.csv”,delim=“\xfe”,col_names=FALSE)
    工作正常(您需要先安装.packages(“readr”)。
    read.csv(“sample.csv”,sep=“\xfe”,header=FALSE)
    也似乎有效。@hrbrmstr如果有效的话,请将此作为答案发布。这可能是一个非常有用的信息,很可惜不能在评论中丢失。@hrbrmstr谢谢!!!效果非常好!@DavidArenburg会的。我正在试图弄清楚
    read_delim
    为什么在
    X22
    列中添加
    \r
    library(readr)
    read_delim("sample.csv", delim="\xfe", col_names=FALSE)
    
    library(data.table)
    fread("sample.csv", sep="\xfe")
    
    do.call(rbind.data.frame, 
            strsplit(readLines("sample.csv"), "\xfe", useBytes=TRUE, fixed=TRUE))