Мы можем использовать функцию spread
.
data2 <- data %>%
spread(key=Ash, value=Diameter)
Это, однако, генерирует 5 строк данных;поэтому мы перемещаем все значения вверх и нажимаем NA
s, используя функцию ниже ( из этого ответа SO здесь ) и отфильтровываем все строки со всеми NA
s, так что в итоге получается только две строки в этомcase.
move_vals_up <- function(x) {
num.na <- sum(is.na(x))
x <- x[!is.na(x)]
x <- c(x, rep(NA, num.na))
return(x)
}
as.data.frame(lapply(data2, move_vals_up)) %>%
filter(rowSums(!is.na(.)) > 1)
Выход:
X Apache Belle.Isle Tolk
1 1 0.566176 0.607365 0.590499
2 2 0.588312 NA 0.631185