функция lapply в R: удаление столбцов с повторяющимися именами в строках

#r #database #lapply

#r #База данных #lapply

Вопрос:

Я вычисляю квантили, триместры и т.д. Моего фрейма данных

 table1 <- data.frame(
  "Q25"= stack(lapply(database_PE[4:7], quantile, prob = c(0.25))),
  "Q50"= stack(lapply(database_PE[4:7], quantile, prob = c(0.50))),
  "Q75"= stack(lapply(database_PE[4:7], quantile, prob = c(0.75))), 
  "IQR" = stack(lapply(database_PE[4:7], IQR)),
  "Trimean" = stack(lapply(database_PE[4:7], trimean)),
  "Skewness" = stack(lapply(database_PE[4:7], skewness)))
  

Результат, как я и ожидал, следующий:

   Q25.values             Q25.ind Q50.values             Q50.ind Q75.values             Q75.ind IQR.values             IQR.ind Trimenan.values
1       23.1        Air.Temp.Max       30.6        Air.Temp.Max       37.8        Air.Temp.Max       14.7        Air.Temp.Max          30.525
2        7.1        Air.Temp.Min       13.5        Air.Temp.Min       21.0        Air.Temp.Min       13.9        Air.Temp.Min          13.775
3       14.4       Air.Temp.Mean       21.9       Air.Temp.Mean       29.9       Air.Temp.Mean       15.5       Air.Temp.Mean          22.025
4        0.0 Precipitation.Total        0.0 Precipitation.Total        0.0 Precipitation.Total        0.0 Precipitation.Total           0.000
         Trimenan.ind Skewness.values        Skewness.ind
1        Air.Temp.Max        34.11678        Air.Temp.Max
2        Air.Temp.Min        34.56093        Air.Temp.Min
3       Air.Temp.Mean        34.07599       Air.Temp.Mean
4 Precipitation.Total        39.82098 Precipitation.Total
  

Тем не менее, я пытаюсь найти способ удалить повторяющиеся столбцы с именами строк Air.Temp.Max, Air.Temp.Min, Air.Temp.Среднее значение и осадки.Итого. Что я должен написать в функции lapply, чтобы удалить эти столбцы?

Ответ №1:

Вы можете сделать это за один lapply вызов и привязать набор данных.

 data <- do.call(rbind.data.frame, lapply(database_PE[4:7], function(x) 
  c(quantile(x, probs = c(0.25, 0.5, 0.75)), IQR(x), trimean(x), skewness(x))))
names(data) <- c('Q25', 'Q50', 'Q75', 'IQR', 'trimness', 'skewness')
  

Это позволит сохранить rownames как rownames, если вы хотите, чтобы это было сделано в виде отдельного столбца :

 data$rowname <- rownames(data)
  

Комментарии:

1. Как я могу добавить в эту функцию do.call значение na.rm = TRUE?

2. Я думаю, что do.call не нужно na.rm , но вам нужно добавить его для отдельных функций, таких как IQR(x, na.rm = TRUE)