解析Thorn“þ&引用;r中的分隔日志文件
我正在尝试读取以thorn分隔的csv文件(最初是扩展名已更改的日志文件) 无论多么简单,解析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þ
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行)
补充说明:
谢谢大家 您有几个选择 首先,您可以将分隔符的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))