Я собрал несколько фреймов данных в список. Каждый df в новом списке имеет 2 протокола: «Group.1» и «x». Я хочу назначить каждому столбцу х имя своего фрейма данных - PullRequest
0 голосов
/ 18 апреля 2020

Я агрегировал несколько фреймов данных, которые были во входном списке, как это было (предположительно), предложенное Эндрю Густаром в просто агрегировать столбцы в нескольких фреймах данных R .

Здесь код, скопированный из вышеупомянутая страница.

Создание фреймов данных:

df1 <- data.frame(Count = c(1,2,3), ID = c("A","A","C"))
df2 <- data.frame(Count = c(1,1,2), ID = c("C","B","C"))
dfList <- list(df1,df2)

> head(dfList)
[[1]]
  Count ID
1     1  A
2     2  A
3     3  C

[[2]]
  Count ID
1     1  C
2     1  B
3     2  C

Агрегирование по столбцу «ID» (согласно предложению Эндрю Густара)

dfList_agg<-lapply(dfList, function(i) {
  aggregate(i[,1], by=list(i[,2]), FUN=sum)
})

dflist_agg

[[1]]
  Group.1 x
1       A 3
2       C 3

[[2]]
  Group.1 x
1       B 1
2       C 3

Как вы Как видно выше, каждый фрейм данных в списке вывода имеет столбец с именем «Group.1» (содержащий столбец BY), а другой с именем «x» (содержащий обобщенные данные).

Вместо этого мне нужно присвоить каждому столбцу «x» имя соответствующего фрейма данных. Ссылаясь на пример, я хочу, чтобы оба столбца с именем «x» получили в списке выходных данных имена «df1» и «df2».

Кто-нибудь может помочь?

Заранее спасибо

Фабио

1 Ответ

0 голосов
/ 19 апреля 2020

Если у нас есть имя list, тогда используйте Map для выполнения задания

dfList_agg <- Map(function(dat, y) {
        names(dat)[names(dat)=='x'] <- y
        dat},
            dfList_agg, names(dfList_agg))
dfList_agg
#$df1
#  Group.1 df1
#1       A   3
#2       C   3

#$df2
#  Group.1 df2
#1       B   1
#2       C   3

data

dfList_agg <- list(structure(list(Group.1 = structure(1:2, .Label = c("A", 
"C"), class = "factor"), x = c(3, 3)), row.names = c(NA, -2L), class = "data.frame"), 
    structure(list(Group.1 = structure(1:2, .Label = c("B", "C"
    ), class = "factor"), x = c(1, 3)), row.names = c(NA, -2L
    ), class = "data.frame"))
names(dfList_agg) <- c('df1', 'df2')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...