多个类别的R max
我得到的数据有点像这样(当然还有更多行): 我想在每个年龄段或以下获得每个区域的最大SomeNumber。SomeNumber会随着年龄的增长而增加,所以我预计32岁以下的青少年在2区的SomeNumber最高,是31岁的青少年,但实际上可能是27岁的青少年 为此,我编写了一个嵌套for循环:多个类别的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
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