R - 在循环的数据帧中提取列

时间:2017-08-26 16:25:10

标签: r for-loop subset read.csv

我需要保存一个csv文件列表,并从每个数据帧中的特定列(第二行)的第13行中提取值。

这是我的尝试:

temp <- list.files(FILEPATH, pattern="*\\.csv$", full.names = TRUE)

for (i in 1:length(temp)){ 
  assign(temp[i], read.csv(temp[i], header=TRUE, ski[=13, na.strings=c("", "NA")))
  subset(temp[i], select=2) #extract the second column of the dataframe
  temp[i] <- na.omit(temp[i])

然而,这不起作用。一方面,我认为这是因为skip命令的read.csv参数,因为它显然忽略了标题。另一方面,如果未使用skip,则会弹出以下错误:

  

subset.default(temp [i],select = 2)出错:参数“subset”是   缺少,没有默认

当我在subset=TRUE命令中插入参数subset时,它不会给出任何错误,但不会执行提取。

任何可能的解决方案?

1 个答案:

答案 0 :(得分:2)

没有看到文件就不容易辨别,但我会使用for,而不是read.table循环。也许你可以从像下面这样的东西中获得灵感。我使用skip = 13,因为您read.csv行和assign在第一行读取列标题。请注意,我避免使用df_list <- lapply(temp, read.table, sep = ",", skip = 13, na.strings = c("", "NA")) names(df_list) <- temp col2_list <- lapply(df_list, `[[`, 2) col2_list <- lapply(col2_list, na.omit) names(col2_list) <- temp col2_list

col2_list

如果你希望col2_list <- lapply(df_list, `[`, 2) 成为df列表,每个列只有一列,原始文件的第2列,就像我在评论中所说的那样

new_name <- "the_column_of_choice"  #  change this!
col2_list <- lapply(col2_list, function(x){
            names(x) <- new_name
            row.names(x) <- NULL
            x
        })

重命名一列并连续重新编号行

/code