【问题标题】:How to import unusual data formats into R?如何将不寻常的数据格式导入 R?
【发布时间】:2023-03-30 10:50:01
【问题描述】:

格式由行组成,每一行都有一组 key="value" 元素。

格式示例:

X="1" Y="2" Z="who are you?"
Y="4" Z="bla bla..."
X="42"

我想将此数据导入 R、表或 data.frame,其中键定义列。

【问题讨论】:

  • 记录(行)是如何定义的?

标签: r import


【解决方案1】:

以下代码会解析您以“融化”形式提供的文件:

data<-NULL 
stream<-file("path");open(stream) #or stream<- textConnection(' X="1" Y="2" Z="who are you?" Y="4" Z="bla bla..." X="42"')
while(length(ele<-c(scan(stream,what="string",n=1,sep="="),scan(stream,what="string",n=1,sep=" ")))>0){
    data<-rbind(data,ele);
}
close(stream);
print(data);

现在正在结晶:

 sapply(unique(data[,1]),function(key) data[data[,1]==key,2])

【讨论】:

  • 这是有效的。谢谢!你能给出一些提示如何加快速度吗?读取 40k 行大约需要 20 分钟,可能是因为对 HDD 的许多 IO 操作?我认为将整个文件读入字符串然后解析它应该可以提高性能?
  • 还有一个问题,最终的数据结构对于某些事情来说是可以的,但我想要其他格式的数据,其中行重合被保存?
  • 关于速度,如果你将 "="s 替换为 " "s; 会更快。比一次扫描(stream,what="string",sep="")可以将所有内容读取为一系列空格分隔的字符串。关于保存行,你能写更多关于这个文件的结构以及你想如何在 R 中表示它吗?我认为一个新问题会适合这个问题。
猜你喜欢
  • 2018-10-23
  • 2016-12-29
  • 2019-08-03
  • 1970-01-01
  • 1970-01-01
  • 2016-05-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多