【问题标题】:chose rows based on condition from column根据列中的条件选择行
【发布时间】:2016-09-16 05:13:33
【问题描述】:

我正在尝试执行以下操作

#generate sample data
loc<-rep("Bak",3)
year<-rep(2005,3)
sea<-c("aut","sum","win")
area<-c(170,126,664)
prod<-c(154,170,932)
yld<-c(0.9,1.35,1/41)
dat<-data.frame(loc,year,sea,area,prod,yld)

我想选择dat$area 最大的那一行。这意味着应该选择第三行,因为

max(dat$area)
[1] 664

但是,我不确定如何索引它。我尝试了以下

dat[,max(dat$area)]

但这给了我一个错误。谁能解释一下如何解决这个问题。

谢谢

【问题讨论】:

  • max 没有给出位置。请改用which.max。而且您将条件放置在错误的位置。试试dat[which.max(dat$area), ]。或者你可以做dat[dat$area == max(dat$area), ]。取决于您是想要 all 行还是匹配条件的第一行。您还可以使用tail(dat[order(dat$area), ], 1) 从有序数据中提取最后一个值
  • 谢谢。这是非常有用的。
  • dat[order(-dat$area), ][1, ]

标签: r select rows


【解决方案1】:

有很多方法,这里有一个:

dat[dat$area==max(dat$area),]

【讨论】:

  • 这样就可以了。谢谢。我会尽快接受这个答案
【解决方案2】:

基础R:

dat[dat$area == max(dat$area), ]

Dplyr:

library(dplyr)
filter(dat, area == max(area))

【讨论】:

    【解决方案3】:
     x<-max(dat$area) ; assign max value to a variable "x"
     subset(dat ,dat$area==x)
      loc year sea area prod        yld
    3 Bak 2005 win  664  932 0.02439024
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-12-16
      • 2011-11-12
      • 1970-01-01
      • 2016-11-02
      相关资源
      最近更新 更多