我想阅读
中描述的文件http://snap.stanford.edu/data/wiki-RfA.html
进入R的数据框。
我知道函数read.table
,但我认为它仅适用于垂直表。
我应该如何阅读上面的文件。
文件格式为:
SRC:Guettarda
TGT:Lord Roem
VOT:1
RES:1
YEA:2013
DAT:19:53, 25 January 2013
TXT:'''Support''' per [[WP:DEAL]]: clueful, and unlikely to break Wikipedia.
所以我想将文件读入一个包含7列SRC, TGT, ... TXT
的数据框。
答案 0 :(得分:0)
这是一个使用readLines
的方法dataStartPosn <- 5
nfields <- 7
TXTmaxLen <- 1e3
eachColnameLen <- 3
#download and read lines
temp <- tempfile()
download.file("http://snap.stanford.edu/data/wiki-RfA.txt.gz",temp)
dataLines <- readLines(gzfile(temp, "r"))
library(plyr)
library(stringi)
#extract data
data <- stri_sub(dataLines, dataStartPosn, length=TXTmaxLen)
#extract colnames
colnames <- unname(sapply(dataLines[1:(nfields+1)], function(x) substring(x, 1, eachColnameLen)))
#form table
df <- data.frame(do.call(rbind, split(data, ceiling(seq_along(data)/(nfields+1)))))
#formatting
df <- setNames(df, colnames)
df[-(nfields+1)]
评论中提到的替代方法太慢了
SRC <- read.csv(pipe("sed -n '1~8p' wiki-RfA.txt"))
TGT <- read.csv(pipe("sed -n '2~8p' wiki-RfA.txt"))
答案 1 :(得分:-1)
这是优雅的解决方案。 我将你的例子保存到ascii文件&#34; testdat&#34;。您可能首先要考虑的一件事是您的分隔符也会在您的数据中出现。这使得处理数据变得更加困难,并且在写入数据之前更改它应该是相当简单的。我将其更改为...
SRC;海岸桐属
TGT; Lord Roem
VOT; 1
RES; 1
YEA; 2013
DAT; 2013年1月25日19:53
TXT;&#39;&#39;&#39;支持&#39;&#39;&#39; per [[WP:DEAL]]:有头脑,不太可能破坏维基百科。
即。用分号代替分隔冒号。
然后很容易,
t<-read.table("testdat", stringsAsFactors=F, sep=";")
p=as.data.frame(t(t$V2), stringsAsFactors=F)
colnames(p)<-t$V1
那么p就是你想要的