У меня есть список фреймов данных, для которых я хочу получить (в отдельном фрейме данных) среднее значение строки указанного столбца, которое может существовать или не существовать во всех фреймах данных списка.Моя проблема возникает, когда указанный столбец не существует хотя бы в одном из фреймов данных списка.
Предположим, следующий список фреймов данных приведен в следующем примере:
df1 <- read.table(text = 'X A B C
name1 1 2 3
name2 5 10 4',
header = TRUE)
df2 <- read.table(text = 'X B C A
name1 8 1 31
name2 9 9 8',
header = TRUE)
df3 <- read.table(text = 'X B A E
name1 9 9 29
name2 5 15 55',
header = TRUE)
mylist_old <-list(df1, df2)
mylist_new <-list(df1, df2, df3)
Предположим, я хочу rowMeans
column C
следующий фрагмент кода отлично работает, когда список данных (mylist_old
) состоит из элементов df1
и df2
,:
Mean_C <- rowMeans(do.call(cbind, lapply(mylist_old, "[", "C")))
Mean_C <- as.data.frame(Mean_C)
Проблема возникает, когда списоксостоит из по крайней мере одного кадра данных, для которого столбец C
не существует, что в моем примере относится к df3
, то есть для списка mylist_new
:
Mean_C <- rowMeans(do.call(cbind, lapply(mylist_new, "[", "C")))
ведет к: "Ошибка в [.data.frame
(X [[i]], ...): выбраны неопределенные столбцы
Один из способов обойти эту проблему - исключить df3
из mylist_new
. Однако моя настоящая программа имеетсписок из 64 фреймов данных, для которых я не знаю, существует столбец C
или нет. Я хотел бы lapply
мой фрагмент кода, только если столбец C
обнаружен как существующий, то есть применяет команду ксписок фреймов данных, но только для фреймов данныхсуществование столбца C
истинно.
Я пробовал это
if("C" %in% colnames(mylist_new))
{
Mean_C <- rowMeans(do.call(cbind, lapply(mylist_new, "[", "C")))
Mean_C <- as.data.frame(Mean_C)
}
Но ничего не происходит, вероятно, потому что colnames
относится к списку, а не к каждому фрейму данных списка.С 64 кадрами данных я не могу обращаться к каждому «вручную», и мне нужна автоматизированная процедура.