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