在创建一个新变量中,其中包含另一个变量的最大值或最小值 -- 按组



R 社区:我正在尝试根据现有变量的值创建一个新变量,不是按行,而是按组。 我正在尝试根据old.var创建max.var并在下面创建min.var,而无需折叠或聚合行,即保留所有id行:

id  old.var min.var max.var
1   1   1   3
1   2   1   3
1   3   1   3
2   5   5   11
2   7   5   11
2   9   5   11
2   11  5   11
3   3   3   4
3   4   3   4
structure(list(id = c(1L, 1L, 1L, 2L, 2L, 2L, 2L, 3L, 3L), old.var = 
c(1L, 
2L, 3L, 5L, 7L, 9L, 11L, 3L, 4L), min.var = c(1L, 1L, 1L, 5L, 
5L, 5L, 5L, 3L, 3L), max.var = c(3L, 3L, 3L, 11L, 11L, 11L, 11L, 
4L, 4L)), .Names = c("id", "old.var", "min.var", "max.var"), class = "data.frame", row.names = c(NA, 
-9L))

我尝试使用aggregateby函数,但它们当然汇总了数据。 我也没有太多运气尝试类似Excel的MATCH/INDEX方法。 提前感谢您的帮助!

您可以使用dplyr

df %>% 
   group_by(id) %>%
   mutate(min.var = min(old.var), max.var = max(old.var))
#Source: local data frame [9 x 4]
#Groups: id [3]
#     id old.var min.var max.var
#  (int)   (int)   (int)   (int)
#1     1       1       1       3
#2     1       2       1       3
#3     1       3       1       3
#4     2       5       5      11
#5     2       7       5      11
#6     2       9       5      11
#7     2      11       5      11
#8     3       3       3       4
#9     3       4       3       4

使用ave作为docendo discimus在问题的评论中指出:

df$min.var <- ave(df$old.var, df$id, FUN = min)
df$max.var <- ave(df$old.var, df$id, FUN = max)

输出:

  id old.var min.var max.var
1  1       1       1       3
2  1       2       1       3
3  1       3       1       3
4  2       5       5      11
5  2       7       5      11
6  2       9       5      11
7  2      11       5      11
8  3       3       3       4
9  3       4       3       4

我们可以使用data.table

library(data.table)
setDT(df1)[, c('min.var', 'max.var') := list(min(old.var), max(old.var)) , by = id]
df1
#   id old.var min.var max.var
#1:  1       1       1       3
#2:  1       2       1       3
#3:  1       3       1       3
#4:  2       5       5      11
#5:  2       7       5      11
#6:  2       9       5      11
#7:  2      11       5      11
#8:  3       3       3       4
#9:  3       4       3       4

最新更新