gpt4 book ai didi

R:列数未知的行的最小值和最大值

转载 作者:行者123 更新时间:2023-12-02 04:58:16 25 4
gpt4 key购买 nike

对于数据框,我需要按行查找从第 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()

适用于原始测试数据。然而,现实世界的数据有重复的 id,例如

(test_data <- tibble(id = c(1:9, 1:9), 
x = runif(18),
x2 = runif(18),
x3 = runif(18)))

这会导致“错误:所有嵌套列必须具有相同数量的元素。”。

最佳答案

一个可能的 tidyverse 解决方案是嵌套id 之外的任何列,然后使用 map 获取 minmax。您不需要指定任何列名称:

library(tidyverse)

# test data
(test_data <- tibble(id = c(1:9),
x = runif(9),
x2 = runif(9),
x3 = runif(9)))
samples = 100

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() # unnest columns

# # A tibble: 9 x 6
# id min_val max_val x x2 x3
# <int> <dbl> <dbl> <dbl> <dbl> <dbl>
# 1 1 0.0217 0.239 0.130 0.0217 0.239
# 2 2 0.125 0.814 0.625 0.814 0.125
# 3 3 0.281 0.770 0.331 0.770 0.281
# 4 4 0.123 0.868 0.123 0.644 0.868
# 5 5 0.149 0.340 0.149 0.340 0.337
# 6 6 0.496 0.865 0.596 0.865 0.496
# 7 7 0.0766 0.984 0.0766 0.656 0.984
# 8 8 0.272 0.926 0.702 0.926 0.272
# 9 9 0.433 0.912 0.912 0.433 0.590

如果有多个 id,您可以使用:

test_data %>%
mutate(row_id = row_number()) %>% # create a row identifier
nest(-id, -row_id) %>% # nest rest of columns apart from id and row id
mutate(min_val = map(data, min), # get min and max
max_val = map(data, max)) %>%
unnest() # unnest columns

关于R:列数未知的行的最小值和最大值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52014814/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com