У меня есть следующий набор данных:
MC <- c(rep("OS000348",8), rep("OS000361",13), rep("OS000375",5))
ASN <- c(rep(2,8), rep(3,5), rep(2,8), rep(3,5))
Dia <- c(870,"NA", 867.3, "NA", "NA", 890.3,"NA","NA",871.2,"NA",868.7,"NA",866.2, "NA",
"NA",851,"NA","NA",842,"NA","NA",880,860,851.8,"NA",841)
df <- data.frame(MC,ASN,Dia)
df
Я хочу найти для каждого MC значения минимального и максимального диаметра и расположить их в итоговой таблице, как показано ниже:
MC Dia Min_Dia Max_Dia
OS000348 870 867.3 890.3
OS000361 871.2 841 871.2
OS000375 880 841 880
Я пытаюсь использовать пакет dplyr и следующее:
result1 <-
df %>%
group_by(MC) %>%
arrange(MC) %>%
slice(c(1, n())) %>%
mutate(minmax = c("Min", "Max")) %>%
gather(var, val, Dia) %>%
unite(key, minmax, var) %>%
spread(key, val)
Но я не получаю таблицу так, как хочу (2-я таблица выше).
А есть альтернативы?
df$DIA <- as.numeric(df$DIA)
. И да, вопрос NA нужно решить раньше ;-) 14.12.2016df2
здесь только один столбец для MC, а неMin_Dia
иMax_Dia
14.12.2016distinct()
по определению удаляет только строки, а не столбцы, поэтому этого не должно происходить 14.12.2016df
с 5 столбцами (и NAs), а во-вторых, я предполагал получить DistinctMC
, но он вернул только 1 столбец вdf2
с отдельным MC (т.е. OS000348, OS000361 OS000375) 14.12.2016distinct(MC, minDia, maxDia)
ко второму ... заработало! 14.12.2016