r - 在 r 中解析 Thorn "þ"分隔的日志文件

标签 r

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

然而简单 readLinesread.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"

现在我尝试用 strsplit(temp,"þ") 解析它并收到:
[[1]]
[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]]
[1] "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]]
[1] "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]]
[1] "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]]
[1] "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"

然后运行 ​​strsplit(temp1,split="þ")我去拿:
[[1]]
 [1] "12-31-2014-21:01:11" "0"                   ""                    "4382037"             "8048852"             "286809041"          
 [7] "60534606"            "1"                   "0x0"                 "1594842"             "107607879"           ""                   
 [13] "256"                 "MD"                  "28"                  "0.0"                 "22"                  "13"                 
 [19] "14915"               "20646"               ""                    "1420088471"

我的最终目标是进行这种解析:一个包含 22 个不同列的数据框。

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

https://drive.google.com/file/d/0B4Krk6hHv0GoUUp4NkhmT1l2ZDQ/view?usp=sharing

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

补充说明:
  • 我正在使用 Windows 机器。
  • Excel 工具“文本到列”成功解析了这个,但是我有多个文件太大而 excel 无法处理,我希望在 r 中继续我的分析。

  • 任何帮助将不胜感激!
    谢谢你们!

    最佳答案

    你有几个选择。

    首先,您可以使用带有内置 read.csv 的分隔符的 unicode 表示。它会正常工作:

    read.csv("sample.csv", sep="\xfe", header=FALSE)
    

    您也可以使用内置的 read.delim具有相同的参数。

    哈德利的新品readr包还有read_delim这有效,但它添加了一个 \r到专栏V22 (什么是 X22 来自 read.csv ):
    library(readr)
    read_delim("sample.csv", delim="\xfe", col_names=FALSE)
    

    迅捷fread来自 data.table也有效:
    library(data.table)
    fread("sample.csv", sep="\xfe")
    

    最后,您可以使用 strsplitrbind.data.frame :
    do.call(rbind.data.frame, 
            strsplit(readLines("sample.csv"), "\xfe", useBytes=TRUE, fixed=TRUE))
    

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

    关于r - 在 r 中解析 Thorn "þ"分隔的日志文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29604256/

    相关文章:

    string - 根据图层部分名称匹配选择堆栈中的栅格

    r - MLlib : How does RFormula. fit() 工作吗?

    r - R如何能够如此快速地对整数序列求和?

    R 引用类 - 如何确定您是否在继承方法中?

    r - 与格子类似的热图图

    sql - 创建一个以整列作为输入和输出的函数

    r - 如何从表中计算 A 发生和 B 与 R 发生的次数?

    r - 排除 Dplyr 中 Dot 中的周末

    r - 获取整数原子向量(相对于数字)

    rstudio 颜色外观,包名称的特定颜色,front::