fread在列中指定分隔符
我试图解析一个2列列表,该列表使用多个空格表示列,单个空格表示列中的单词。我尝试过的任何方法都没有成功地将数据拆分为两列。我该怎么做fread在列中指定分隔符,r,dataset,R,Dataset,我试图解析一个2列列表,该列表使用多个空格表示列,单个空格表示列中的单词。我尝试过的任何方法都没有成功地将数据拆分为两列。我该怎么做 library(data.table) item.ids<-fread("http://eve-files.com/chribba/typeid.txt",sep2=" ") 这里有一种方法,使用“tidyr”中的提取,应该很容易理解 首先,我们读取中的数据,并检查前几行和最后几行。经检查,我们发现数据值为第3行至22384行 x <- readLi
library(data.table)
item.ids<-fread("http://eve-files.com/chribba/typeid.txt",sep2=" ")
这里有一种方法,使用“tidyr”中的
提取,应该很容易理解
首先,我们读取中的数据,并检查前几行和最后几行。经检查,我们发现数据值为第3行至22384行
x <- readLines("http://eve-files.com/chribba/typeid.txt")
# Check out the data
head(x) # Let's get rid of the first two lines...
tail(x) # ... and the last 3
或
另一种方法可能是使用strsplit
和[]{2,}
作为分割值do.call(rbind,…)
将是后面的习惯用法,但您可能只想筛选拆分导致两个值的情况
do.call(rbind, Filter(function(z) length(z) == 2, strsplit(x, "[ ]{2, }")))
这里有一种方法,使用“tidyr”中的提取,应该很容易理解
首先,我们读取中的数据,并检查前几行和最后几行。经检查,我们发现数据值为第3行至22384行
x <- readLines("http://eve-files.com/chribba/typeid.txt")
# Check out the data
head(x) # Let's get rid of the first two lines...
tail(x) # ... and the last 3
或
另一种方法可能是使用strsplit
和[]{2,}
作为分割值do.call(rbind,…)
将是后面的习惯用法,但您可能只想筛选拆分导致两个值的情况
do.call(rbind, Filter(function(z) length(z) == 2, strsplit(x, "[ ]{2, }")))
这似乎有效:
library(readr)
url = "http://eve-files.com/chribba/typeid.txt"
df = read_fwf(url, fwf_empty(url), skip = 2)
colnames = read_table(url, n_max = 1)
names(df) = names(colnames)
df = na.omit(df)
dim(df)
# [1] 22382 2
summary(df)
# typeID typeName
# Min. : 0 Length:22382
# 1st Qu.: 13986 Class :character
# Median : 22938 Mode :character
# Mean : 53827
# 3rd Qu.: 30209
# Max. :368620
这似乎有效:
library(readr)
url = "http://eve-files.com/chribba/typeid.txt"
df = read_fwf(url, fwf_empty(url), skip = 2)
colnames = read_table(url, n_max = 1)
names(df) = names(colnames)
df = na.omit(df)
dim(df)
# [1] 22382 2
summary(df)
# typeID typeName
# Min. : 0 Length:22382
# 1st Qu.: 13986 Class :character
# Median : 22938 Mode :character
# Mean : 53827
# 3rd Qu.: 30209
# Max. :368620
逐行读取文本文件:
l <- list()
fileName <- "http://eve-files.com/chribba/typeid.txt"
conn <- file(fileName,open="r")
linn <-readLines(conn)
for (i in 1:length(linn)){
l[i] <- list(linn[i])
}
close(conn)
逐行读取文本文件:
l <- list()
fileName <- "http://eve-files.com/chribba/typeid.txt"
conn <- file(fileName,open="r")
linn <-readLines(conn)
for (i in 1:length(linn)){
l[i] <- list(linn[i])
}
close(conn)
这看起来更像是固定宽度,而不是固定宽度。看看“iotools”或“readr”软件包。另外,如果你不考虑它的话,#
将是一个问题。或者只是在base中读取read.fwf
。这看起来更像是固定宽度,而不是delimted。看看“iotools”或“readr”软件包。另外,如果你不解释的话,#
将是一个问题。或者只是在base中阅读read.fwf
。这是我最初的评论中的想法,但没有进一步探讨+1是的,我真的很惊讶你在回答中没有走那条路线。我尝试了一点read.fwf
,但它给了我行名方面的问题,而且似乎很难解决。readr
版本更友好。基本的read.fwf
速度非常慢,因此read\u fwf
实际上是一个非常受欢迎的文件输入选项……这是我在最初的评论中想到的,但没有进一步探讨+1是的,我真的很惊讶你在回答中没有走那条路线。我尝试了一点read.fwf
,但它给了我行名方面的问题,而且似乎很难解决。readr
版本更友好。基本的read.fwf
速度非常慢,因此read\u fwf
实际上是一个非常受欢迎的文件输入选项的添加。。。。
l_new_frame <- data.frame(do.call('rbind', l_new))
l_new_frame <- l_new_frame[-c(1,2),]
names(l_new_frame) <- c('typeID', 'typeName')
print(l_new_frame[1:100,], row.names = FALSE)