假设我有一组数据帧: df1, df2, d3, df4
。我想对这些数据帧中的每一个应用某种行为。我不想重复复制代码,而是想通过某种 for 循环来做到这一点。例如,假设我想获取 df 并重新分配它,以便第一列是行名称。我这样做的正常方法是:
df1_b <- df1[,-1]
rownames(df1_b) <- df1[,1]
我将如何对我拥有的所有四个数据帧执行此操作。我想我需要以某种方式将数据帧分组为一个
set
然后执行类似的操作for (i in set) {
i+"_b" <- i[,-1]
rownames(i_b) <- i[,1]
}
我试图用 cbind 做到这一点:
df_set <- c(df1, df2, df3, df4)
for (i in df_set) {
i+"_b" <- i[,-1]
rownames(i_b) <- i[,1]
}
但是当然这不起作用(我很确定 R 不会像这样进行字符串连接)。
任何帮助,将不胜感激!
最佳答案
我们可以使用 mget
将多个对象的值获取到一个 list
中,然后通过使用 list
遍历 list
来在 lapply
中进行处理
lst1 <- lapply(mget(paste0("df", 1:4)), function(x) {
row.names(x) <- x[,1]
x[,-1]
})
如果我们想改变原始对象(不推荐)
list2env(lst1, .GlobalEnv)
或者另一个选项是
tidyverse
library(purrr)
library(tibble)
library(dplyr)
mget(ls(pattern = "^df\\d+$")) %>%
map(~ .x %>%
column_to_rownames(names(.)[1]))
关于r - 迭代 R 中的一组数据帧,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/59652891/