对于一个数据框,我需要找到每一行从第二列开始的未知列数中的最小值和最大值。以下是一个示例:
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])))
因为我希望保留 id 列(以便与另一个数据框连接),并且指定列位置似乎是一种明显的方法,因为我不关心列名,而且样本可能很大。谢谢! 编辑后的示例 这个(如建议的)
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()
这段代码可以在原始测试数据上运行。但是,在现实世界的数据中,会出现id重复的情况,例如:
(test_data <- tibble(id = c(1:9, 1:9),
x = runif(18),
x2 = runif(18),
x3 = runif(18)))
这导致出现“错误:所有嵌套列必须具有相同数量的元素。”。
group_by()
。只需使用nest(-id)
即可。 - j3ypigroup_by
和nest
,但从现在开始会改变这种做法 :) - AntoniosKdf <- tibble::rowid_to_column(df, "id_uni")
为所有行分配唯一的ID。 - tmfmnkrow_number
创建唯一的 ID,但是rowid_to_column
也非常好。 - AntoniosK