#r
#r
Вопрос:
У меня есть такие данные
df<- structure(list(Mydata = c("AAA_F1", "AAA_F2", "AAA_F3"), F1_100 = c(0,
7611.5, 12257.1), F2_100 = c(0L, 0L, 0L), F3_100 = c(200, 1967.7,
400), F1_200M = c(0, 8155.4, 0), F2_200M = c(100, 500, 2490.1
), F3_200M = c(0, 2395.3, 0)), class = "data.frame", row.names = c(NA,
-3L))
Я пытаюсь получить медиану и sd в виде двух фреймов данных, я делаю следующее, но я не получаю то, что хочу, поэтому первая строка должна дать мне медиану для каждых 3 значений из каждого столбца
, а вторая должна дать стандартное отклонение для каждых трех значений каждого столбца. Я думал, что должен сгруппировать их по именованию
df_median <- as.data.frame(df %>% group_by(Mydata) %>% summarise_all(funs(median)))
df_sd <- as.data.frame(df %>% group_by(Mydata) %>% summarise_all(funs(sd)))
Вывод должен выглядеть так, например, для медианы (я использовал xls)
Mydata F1_100 F2_100 F3_100 F1_200M F2_200M F3_200M
AAA 7611.5. 0 400 0 500 0
Ответ №1:
Вы можете использовать across
для применения нескольких функций к нескольким столбцам.
library(dplyr)
result <- df %>% summarise(across(c(F1_100:F3_200M), list(median = median, sd = sd)))
Комментарии:
1. Я привел пример выше, они должны быть разделены
2. Вы хотите применить функции отдельно?
df1 <- df %>% summarise(across(c(F1_100:F3_200M), median))
иdf2 <- df %>% summarise(across(c(F1_100:F3_200M), sd))
3. Я получаю сообщение об ошибке, потому что я удалил символы как имена столбцов, есть идеи? Мне нравится ваше решение, но оно все еще не работает
4. Извините, я не понимаю. Что вы имеете в виду? Отличаются ли ваши данные от тех, которыми вы поделились?
Ответ №2:
Вы можете использовать sapply
в базе R:
sapply(df[-1], median)
#R> F1_100 F2_100 F3_100 F1_200M F2_200M F3_200M
#R> 7611.5 0.0 400.0 0.0 500.0 0.0
sapply(df[-1], sd)
#R> F1_100 F2_100 F3_100 F1_200M F2_200M F3_200M
#R> 6188.067 0.000 968.026 4708.522 1280.174 1382.927
Вы можете использовать lapply
вместо, за которым следует, as.data.frame
если хотите data.frame
.
Комментарии:
1. он добавляет X в имя столбца
2. При запуске этого не
as.data.frame(lapply(df[-1], median))
происходит.