r - 如何在多个数据帧上实现多个相同的功能并将输出检索到多个数据帧
问题描述
我使用 tor() 函数在 R 的全局环境中加载了 16047 个 csv 文件。所以现在我有 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
所以我为每个现有的数据框创建新的数据框并分离第一列,然后删除其中的三列。
有没有一种方法可以像我们通常在其他编程语言(如 for 循环)中那样用 R 编写,并像 [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)
})
但这并没有像我想要的那样给我单独的数据框。
谢谢
解决方案
您可以使用创建数据框的名称paste0
并使用mget
将它们放入列表中。
list_df <- mget(paste0('LR', 1:16047))
当它们在列表中时,对多个数据帧进行操作会更容易。然后,您可以将您的函数应用到每个数据框lapply
。我认为separate
可以使用一些正则表达式来简化您的调用,而不是创建 4 列然后删除其中的 3 列,但是由于我们不知道您的数据看起来如何,所以我不会修改它。
new_df <- lapply(list_df, function(x) {
x1 <- tidyr::separate(x, V1, c("Column1", "Column2", "MacroNode", "Column4"))
x1$Column1 <- NULL
x1$Column2 <- NULL
x1$Column4 <- NULL
x1
})
new_df
如果您希望更改反映在您可以使用的原始数据框中,这将为您提供数据框列表list2env
。
list2env(new_df, .GlobalEnv)
推荐阅读
- jenkins - 如何在 GitHub 上更改“默认”Jenkins 构建状态标签?
- reactjs - 数据如何传输到其他类组件
- javascript - 如何在不导出基类的情况下调用 TS 方法
- statistics - 两个术语之间有什么区别,即。描述性统计和描述性分析
- laravel - 如何在条纹仪表板上发送客户电子邮件
- c# - Azure C# v2 功能:处理整个表而不是表的一部分
- javascript - 如何在javascript中做双换行符
- angular - 如何访问对象内部的类型(Angular 中的 REDUX)
- python - 如何在返回 Lambda python 之前检查字典中的值
- azure - 授权失败并出现 401,同时尝试访问 azure rest apis