多个类别的R max

标签 r loops dataframe categories

<分区>

我得到的数据有点像这样(当然还有更多行):

Age     Work Zone     SomeNumber
26      1          2.61
32      4          8.42
41      2          9.71
45      2          4.14
64      3          6.04
56      1          5.28
37      4          7.93

我想获得每个年龄段或以下年龄段的最大 SomeNumber。 SomeNumber 随着年龄的增长而增加,所以我预计 32 岁以下的 2 区中最高的 SomeNumber 是 31 岁的人,但实际上可能是 27 岁的人。

为此,我编写了一个嵌套的 for 循环:

for(i in zonelist){
  temp = data[data$zone==i,]
  for(j in 1:max(data$age)){
    temp.lessequal=c(temp.lessequal,max((temp[temp$Age<=j,])$SomeNumber))
  }
  #plot temp.lessequal or save it at this point
}

这当然非常慢。我怎样才能更快地做到这一点?我看过一次按两列排序的排序函数,但这并不能让我取每组的最大值。

最佳答案

数据:

df1 <- read.table(text='Age Work_Zone  SomeNumber
26      1          2.61
                   32      4          8.42
                   41      2          9.71
                   45      2          4.14
                   64      3          6.04
                   56      1          5.28
                   37      4          7.93', 
                   header = TRUE)

代码:

df2 <- with( df1, df1[ Age <= 32, ] )  # extract rows with Age <= 32
# get maximum of someNumber by aggregating with work_zone and then merging with df1 to combine the age column
merge(aggregate(SomeNumber ~ Work_Zone, data = df2, max), df2) 
#   Work_Zone SomeNumber Age
# 1         1       2.61  26
# 2         4       8.42  32

关于多个类别的R max,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48483537/

相关文章:

c++ - 从中心顺时针扩展螺旋打印二维数组

r - 根据唯一/不同值的数量选择组

r - R 中的列表理解

r - 如何提取 10 个字符数字的前 6 位数字并将其转换为 as.Date?

r - 根据经纬度获取 K 个最近邻

python - Groupby 算作一列,groupby 计算 Pandas 中另一列的唯一值数

python - 分离组合数据框

r - 转换 data.table 中的*一些*列类

Python 用 if/else append 一个字符串?

c# - 循环遍历两个并发字典的 Lambda 表达式