R - 在循环的数据框中提取列
R - extracting column in dataframes of a loop
我需要保存一个 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])
但是,这不起作用。一方面,我认为这是因为 read.csv
命令的 skip
参数,因为它显然忽略了 headers。另一方面,如果不使用skip
,则会弹出以下错误:
Error in subset.default(temp[i], select = 2) : argument "subset" is
missing, with no default
当我在 subset
命令中插入参数 subset=TRUE
时,它没有给出任何错误,但没有执行提取。
任何可能的解决方案?
如果没有看到文件,很难分辨,但我会使用 lapply
,而不是 for
循环。也许你可以从下面这样的东西中得到灵感。我使用 read.table
是因为 skip = 13
行和 read.csv
在第一行中读作列 headers。请注意,我避免使用 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
成为 df 的列表,每列只有一列,即原始文件的第 2 列,那么,就像我在评论中所说的那样,使用
col2_list <- lapply(df_list, `[`, 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
})
我需要保存一个 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])
但是,这不起作用。一方面,我认为这是因为 read.csv
命令的 skip
参数,因为它显然忽略了 headers。另一方面,如果不使用skip
,则会弹出以下错误:
Error in subset.default(temp[i], select = 2) : argument "subset" is missing, with no default
当我在 subset
命令中插入参数 subset=TRUE
时,它没有给出任何错误,但没有执行提取。
任何可能的解决方案?
如果没有看到文件,很难分辨,但我会使用 lapply
,而不是 for
循环。也许你可以从下面这样的东西中得到灵感。我使用 read.table
是因为 skip = 13
行和 read.csv
在第一行中读作列 headers。请注意,我避免使用 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
成为 df 的列表,每列只有一列,即原始文件的第 2 列,那么,就像我在评论中所说的那样,使用
col2_list <- lapply(df_list, `[`, 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
})