This question already has answers here:
Aggregate a dataframe on a given column and display another column

(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