假设我有一组数据帧: 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/

10-12 23:35