从R中的导入数据中提取某些行

时间:2013-12-30 00:11:55

标签: r

我有一个使用readLines()命令加载到R中的数据集,结构为chr。该数据是从CSV文件中导入的,其中某些行中包含字符串字符,而其他数据中包含数据。我想要提取的数据集在第15到第37行。我尝试使用read.table(data[15:37],sep=",",header=F),但我一直收到错误:Error in file(file, "rt") : invalid 'description' argument。我尝试使用data.frame(data[15:37],sep=",")命令来解析相关数据集,但遗憾的是没有运气。我做错了什么?

更新

所以我有我的数据所在的起始行和结束行

start=c(13,103,202,250)
end=c(102,201,249,300)

因此第一个数据块位于第13行和第102行之间。对于第二块可重复数据,从第103行开始到201结束。

我正在尝试创建一个循环,我可以使用dataset_{#number}=read.table(text=data[start:end],sep=",",header=F)

来提取数据
n=1
for (i in start){
dataset_{n}=read.table(text=data[i:end[n]],sep=",",header=F)
n=n+1
}

如何告诉循环创建一个全新的数据集来保存每个连续的块?我怎么告诉R {n}不是字符串而是循环的一部分?

2 个答案:

答案 0 :(得分:2)

不确定您是如何读取数据的,但如果您正在使用csv,则可以使用:

mydata = read.csv("mydata.csv")  # read csv file 
mydata                           # print data frame
  • 现在您可以使用数据框选项;

您可以使用评论mydata[15:35,]

访问您的数据

@readLines {base}:“从连接中读取部分或全部文本行。”:

您可以尝试使用mytable<-read.table(textConnection(mydata))获取data.frame

答案 1 :(得分:1)

read.table无法打开file连接以读取源数据。尝试text连接:

data <- readLines(textConnection("Lorem ipsum dolor sit amet consectetuer nunc metus sem et dui. Curabitur nibh
Donec convallis laoreet id Vivamus wisi Nunc nec metus.
1,2,3,4
5,6,7,8"))
rowsToExtract <- 3:4
read.table(text=data[rowsToExtract], sep=",", header=F)
# V1 V2 V3 V4
# 1  1  2  3  4
# 2  5  6  7  8

<强> @Update:

考虑以下示例数据:

data <- readLines(textConnection("Lorem ipsum dolor sit amet consectetuer nunc metus sem et dui. Curabitur nibh
Donec convallis laoreet id Vivamus wisi Nunc nec metus.
1,2,3,4
5,6,7,8
Lorem ipsum
9,10,11,12
13,14,15,16"))
start <- c(3,6)
end <- c(4,7)

您可能想要使用list,您可以使用(a。)循环创建{<1}}:

dataset <- list()
for (i in 1:length(start))
  dataset[[i]] <- read.table(text=data[start[i]:end[i]], sep=",", header=F)
dataset

或(b。)使用mapply

之类的东西
mapply(function(from, to) read.table(text=data[from:to], sep=",", header=F), start, end, SIMPLIFY=FALSE)

结果:

# [[1]]
#   V1 V2 V3 V4
# 1  1  2  3  4
# 2  5  6  7  8
# 
# [[2]]
#   V1 V2 V3 V4
# 1  9 10 11 12
# 2 13 14 15 16
dataset[[1]]
#   V1 V2 V3 V4
# 1  1  2  3  4
# 2  5  6  7  8 

但是,如果您不想使用list,请尝试:

for (i in 1:length(start))
  assign(paste0("dataset_", i), read.table(text=data[start[i]:end[i]], sep=",", header=F))