如何从多列中删除特定行

时间:2015-06-03 21:25:14

标签: r csv

我从R中的多个csv文件导入一些列。我想删除第1472行之后的所有数据。

temp = list.files(pattern="*.csv")    #Importing csv files
Normalyears<-c(temp[1],temp[2],temp[3],temp[5],temp[6],temp[7],temp[9],temp[10],temp[11],temp[13],temp[14],temp[15],temp[17],temp[18],temp[19],temp[21],temp[22],temp[23])
leapyears<-c(temp[4],temp[8],temp[12],temp[16],temp[20])      #separating csv files with based on leap years and normal years.

Importing only the second column of each csv file.

myfiles_Normalyears = lapply(Normalyears, read.delim,colClasses=c('NULL','numeric'),sep =",")
myfiles_leapyears = lapply(leapyears, read.delim,colClasses=c('NULL','numeric'),sep =",")

new.data.leapyears <- NULL

for(i in 1:length(myfiles_leapyears)) { 
 in.data <-      read.table(if(is.null(myfiles_leapyears[i])),skip=c(1472:4399),sep=",")
 new.data.leapyears <- rbind(new.data.leapyears, in.data)}

循环假设删除从1472到4399的所有行。

  Error: Error in read.table(myfiles_leapyears[i], skip = c(1472:4399), sep = ",") : 

'file'必须是字符串或连接

3 个答案:

答案 0 :(得分:1)

nrows有一个read.table参数,为什么不尝试

read.table(myfiles_leapyears[i], nrows = 1471,sep=",")

答案 1 :(得分:0)

很好。我只是将列表中的数据转换为数据帧。

     df <- as.data.frame(myfiles_leapyears,byrow=T)

     leap_df<-head(df,-2928)

答案 2 :(得分:0)

您的myfiles_leapyearslist。在对列表进行子集化时,您需要使用双括号来访问单个元素,否则您只需获得长度为1的子列表。

所以替换

myfiles_leapyears[i]

myfiles_leapyears[[i]]

至少会处理invalid subscript type 'list'错误。我的第二个Josh W.认为nrows论证似乎比skip论证更聪明。

或者,如果您使用sapply(“s”表示简化)而不是lapply(列表中的“l”)进行定义,那么使用[i]可能会很好:< / p>

myfiles_leapyears = lapply(leapyears, read.delim,colClasses=c('NULL','numeric'),sep =",")