【发布时间】:2020-11-14 23:23:24
【问题描述】:
我有 16047 个 csv 文件,我使用 tor() 函数将它们加载到 R 中的全局环境中。所以现在我有 16047 个数据帧(命名为 LR1、LR2、....LR16047),每个数据帧有两列。现在我想对所有数据框做一些工作。
我的数据框如下所示:
V1 V2
suff_extn_AACCATTGGCTTTGTGCCATCGGCGGAAGTG_0 T
suff_extn_AAAGGTCGCCACCATTTCCGGCAGCGATGCT_0 AAAACCTGGCTGCTGGCTCAGGCCGATTTTC
这是我要应用于所有数据帧的代码。
pref_LR1 <- LR1 %>% separate(V1, c("Column1", "Column2", "MacroNode", "Column4"))
pref_LR1$Column1 <- NULL
pref_LR1$Column2 <- NULL
pref_LR1$Column4 <- NULL
所以我正在为每个现有数据框创建新的数据框,并将第一列分开,然后删除其中的三列。
有没有一种方法可以像我们通常在其他编程语言中所做的那样用 R 编写,比如 for 循环,并像 [i] 一样访问它们以获取第 i 个数据帧。
我试图做一些在 R 中对多个文件应用相同功能时提到的事情
喜欢这个
# Create vector of file names in working direcotry
files <- list.files()
files <- files[grep("csv", files)]
#create empty list
lst <- vector("list", length(files))
#Read files in to list
for(i in 1:length(files)) {
st[[i]] <- read.csv(files[i])
}
#Apply a function to the list
l <- lapply(lst, function(x) {
//the work of the function
return(x)
})
但这并没有像我想要的那样给我单独的数据框。
谢谢
【问题讨论】:
-
假设
st[[i]]是一个错字,而您实际上有lst[[i]]。然后最终的l对象将包含所有的data.frames。您可以使用l[[1]]、l[[2]]、l[[3]等来访问它们(从列表中提取时请注意双括号)。将所有数据放在一个列表中可以更轻松地使用,而不是在全局环境中创建数千个变量。
标签: r function loops dataframe csv