перебрать набор фреймов данных в R - PullRequest
3 голосов
/ 08 января 2020

Допустим, у меня есть набор данных: df1, df2, d3, df4. Я хочу применить какое-то поведение к каждому из этих фреймов данных. Вместо того, чтобы повторно копировать код, я хочу сделать это через l oop. Например, допустим, я хочу взять df и назначить его так, чтобы в первом столбце были имена строк. Обычный способ сделать это так:

df1_b <- df1[,-1]
rownames(df1_b) <- df1[,1]

Как бы я go сделал это со всеми четырьмя кадрами данных, которые у меня есть. Я полагаю, мне нужно как-то сгруппировать кадры данных в один 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 не выполняет конкатенацию строк таким образом).

Любая помощь будет признательна!

Ответы [ 2 ]

3 голосов
/ 08 января 2020

Мы можем использовать 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])) 
2 голосов
/ 08 января 2020

Вы можете применить функцию, например:

# getting some dummy data
df1 <- mtcars
df2 <- mtcars
df3 <- mtcars
df4 <- mtcars

lst <- list(df1, df2, df3, df4)

# example of applying the function row.names to the data
Map(row.names, lst)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...