我需要保存一个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
时,它不会给出任何错误,但不会执行提取。
任何可能的解决方案?
答案 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