This question already has answers here:
Aggregate a dataframe on a given column and display another column
(8个答案)
2年前关闭。
我有这样的数据(当然还有更多行):
我想在每个年龄或以下年龄获得每个区域的最大SomeNumber。 SomeNumber随着年龄的增长而增加,因此我预计2区中最高的SomeNumber年龄在32岁以下的人是31岁的男性,但实际上可能是27岁的男性。
为此,我编写了一个嵌套的for循环:
当然这是非常慢的。我怎样才能更快地做到这一点?我已经看过一次可以按两列排序的order函数,但是这并不能让我利用每个组的最大值。
码:
(8个答案)
2年前关闭。
我有这样的数据(当然还有更多行):
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随着年龄的增长而增加,因此我预计2区中最高的SomeNumber年龄在32岁以下的人是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
}
当然这是非常慢的。我怎样才能更快地做到这一点?我已经看过一次可以按两列排序的order函数,但是这并不能让我利用每个组的最大值。
最佳答案
数据:
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 - 多个类别的R max [重复项],我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/48483537/
10-12 12:57