多个类别的R max

多个类别的R max,r,loops,dataframe,categories,R,Loops,Dataframe,Categories,我得到的数据有点像这样(当然还有更多行): 我想在每个年龄段或以下获得每个区域的最大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(tem

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

我想在每个年龄段或以下获得每个区域的最大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
}
for(区域列表中的i){
temp=data[data$zone==i,]
对于(1中的j:最大值(数据$age)){
温度lessequal=c(温度lessequal,最大值)(温度[temp$Age数据:

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

df1使用库
data.table
可以选择小于所需年龄的行,然后输出每个工作区的
max(somenumber)
及其各自的年龄,即按工作区分组

library(data.table)
setDT(df1)[Age<=32,.(max(SomeNumber),Age),by=Work_Zone]
   Work_Zone   V1 Age
1:         1 2.61  26
2:         4 8.42  32
库(data.table)

setDT(df1)[年龄OP似乎在根据
@Sathish寻找
max
值。如果我理解正确,这个问题对我来说似乎并不重复。可能是我错了。我的答案与上面发布的链接中的一个解决方案完全相同。谢谢你提供这个代码片段,它可能会提供一些有限的、即时的帮助。A by showing为什么这是一个很好的问题解决方案,并将使其对未来读者提出其他类似问题更有用。请您的答案添加一些解释,包括您所做的假设。我不认为OP在任何地方都是硬编码32,而是将其用作示例。他/她正在查找当前行的年龄。
library(data.table)
setDT(df1)[Age<=32,.(max(SomeNumber),Age),by=Work_Zone]
   Work_Zone   V1 Age
1:         1 2.61  26
2:         4 8.42  32
# Data 
df <- 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 = T, stringsAsFactors = F)

library(sqldf)
df3 <- sqldf("select df1.Work_Zone, df1.Age, max(df2.SomeNumber) from df df1 
       inner join df df2 on df1.Work_Zone = df2.Work_Zone 
       WHERE df2.Age <= df1.Age 
       GROUP BY df1.Work_Zone, df1.Age")

# Result:
#   Work_Zone Age max(df2.SomeNumber)
# 1         1  26                2.61
# 2         1  56                5.28
# 3         2  41                9.71
# 4         2  45                9.71
# 5         3  64                6.04
# 6         4  32                8.42
# 7         4  37                8.42