Для фрейма данных мне нужно найти минимальное и максимальное значения по строкам для неизвестного числа столбцов, начиная со столбца 2 и далее. Вот пример:
library(tidyverse)
# test data
(test_data <- tibble(id = c(1:9),
x = runif(9),
x2 = runif(9),
x3 = runif(9)))
samples = 100
# This example, which specifies the column names, correctly finds the min and max values by row
(test_1 <- test_data %>%
rowwise() %>%
mutate(min_val = min(x, x2, x3), max_val = max(x, x2, x3)))
# This example does not
(test_2 <- test_data %>%
rowwise() %>%
mutate(min_val = min(x:x3), max_val = max(x:x3)))
Что я на самом деле хочу сделать, это что-то вроде
mutate(min_val = min([,2:samples+1]), max_val = max([,2:samples+1])))
потому что (1) я хочу сохранить столбец id (для последующего объединения с другим фреймом данных), и (2) указание по позиции столбца кажется очевидным способом сделать это, поскольку меня не касается имя столбца, и примеры могут быть большим.
Спасибо!
Отредактированный пример
Это (как предлагалось)
test_data %>%
nest(-id) %>% # nest rest of columns apart from id
mutate(min_val = map(data, min), # get min and max
max_val = map(data, max)) %>%
unnest()
работает с исходными данными испытаний. Однако данные реального мира имеют повторения идентификатора, например
(test_data <- tibble(id = c(1:9, 1:9),
x = runif(18),
x2 = runif(18),
x3 = runif(18)))
, и это приводит к «Ошибка: все вложенные столбцы должны иметь одинаковое количество элементов».