【问题标题】:get row with max values in all columns in R [duplicate]在R中的所有列中获取具有最大值的行[重复]
【发布时间】:2011-05-19 11:22:43
【问题描述】:

可能重复:
Extracting indices for data frame rows that have MAX value for named field

你好,

我有一个这样的数据框:

   A1 A3    d
1   a pr    5
2   a be    0
3   a cd    8
4   a dy    0
5   b pr    3
6   b be    4
7   b cd    9

etc...

我想测试每一行,并获得基于 A1 的唯一行并且具有 d 的最大值

输出应该是这样的

A1 A3 d
a  cd 8
b  cd 9

等等。

数据框更大,但这只是一个例子。

这可以用 R 完成吗?没有循环和长的东西??

谢谢

【问题讨论】:

  • @Joris Meys:它是重复的,但我不理解使用的整个方法,我能够生成具有最大值的行的所有 id,我无法获得子集基于这个id的原始数据框,这个怎么做??
  • 首先,请仔细阅读stackoverflow.com/questions/5963269/…。其次,如果您有 id 并且不知道如何进行子集化(参见例如 ?subset、?Extract、...),那么现在是时候开始阅读 stats.stackexchange.com/questions/138/resources-for-learning-r 中的任何一个了
  • @Joris Meys:感谢您的回复。我知道如何提取它们,但我需要另一种方法。

标签: r dataframe


【解决方案1】:

最简单的方法是对d 列进行排序,然后删除A1 列中的重复项:

df2 <- df[order(df$d,decreasing=T),]
df2[!duplicated(df2$A1),]

这确实假设有一个唯一的最大值,如果超过 1 个,您会丢失一些结果。

【讨论】:

  • 非常感谢,它起作用了:),但我认为每列中的最大值不止 1 个,但我只需要 1 个。
【解决方案2】:

大概

ddply(dfr, "A1", function(curdfr){curdfr[which.max(curdfr$d),]})

【讨论】:

  • 注意:我没有对此进行测试,因为没有提供适当的示例数据(如:易于测试,无需求助于 textconnection 等;阅读:dput. )
  • +1 表示输入时间比创建样本数据时间长的 cmets!
【解决方案3】:

数据

mydf <- read.table(textConnection("
 Lp   A1 A3    d
 1   a pr    5
 2   a be    0
 3   a cd    8
 4   a dy    0
 5   b pr    3
 6   b be    4
 7   b cd    9"),header=T,row.names="Lp")

代码

require(data.table)
mydf <- data.table(mydf)
mydf[,.SD[which.max(d)],by=A1]

【讨论】:

    猜你喜欢
    • 2018-02-09
    • 2019-06-09
    • 2018-11-21
    • 1970-01-01
    • 1970-01-01
    • 2021-09-11
    • 2016-06-03
    • 1970-01-01
    • 2021-04-18
    相关资源
    最近更新 更多