3

当 C 列 = X 的值时,如何找到一列(B 列)的最大值。我如何保留 A 列的标签。假设我的数据称为 my.data,a 列 = 国家名称,列b = 出生的孩子数,C 栏 = 孩子出生的年份。那么如何找到 2001 年出生的孩子的最大数量,同时保持国家名称一致呢?

谢谢,非常抱歉,我是 R 新手

4

3 回答 3

5

R中有很多选项(以及关于SO的问题)可以进行这种操作

我会给出一个data.table解决方案,因为我喜欢这种查询的简单语法

数据表

提高大型数据集的效率。我还提供了一个非常简单的子集语法。(.SD 引用由iand创建的子集by

library(data.table)
DT <- data.table(my.data)
DT[year==2001, .SD[which.max(births)]]

或者这是相同的,不需要 .SD

DT[year==2001][which.max(births)]

示例数据

my.data <- expand.grid(
  Country = c('Swaziland', 'Australia', 'Tuvalu', 'Turkmenistan'),
  year = 1990:2012 )
my.data$births <- rpois(nrow(my.data), lambda = 500)
DT <- data.table(my.data)
DT[year==2001, .SD[which.max(births)]]

##      Country year births
## 1: Swaziland 2001    501

使用基础 R

births_2001 <- subset(my.data, year == 2001)
births_2001[which.max(births_2001$births),]

##      Country year births
## 45 Swaziland 2001    501
于 2012-09-18T23:29:19.477 回答
5

有很多方法可以做到这一点。我会分解它,以便您希望看到发生了什么更好的事情。

 my.data <- data.frame(
    country=c("Australia","France","Germany","Honduras","Nepal","Honduras"),
    children=c(120000,354000,380000,540000,370000,670000),
    year=c(2000,2001,2001,2002,2001,2003)
    )

 myd01 <- my.data[my.data$year==2001,]  # pulls out the 2001 data
 myd01[myd01$children==max(myd01$children),]  # finds the rows with the maximum 
于 2012-09-18T23:36:28.130 回答
3
> aggregate(.~ year,data=my.data, FUN= max)

这也将解决问题。

于 2013-07-18T08:46:21.453 回答