当 C 列 = X 的值时,如何找到一列(B 列)的最大值。我如何保留 A 列的标签。假设我的数据称为 my.data,a 列 = 国家名称,列b = 出生的孩子数,C 栏 = 孩子出生的年份。那么如何找到 2001 年出生的孩子的最大数量,同时保持国家名称一致呢?
谢谢,非常抱歉,我是 R 新手
R中有很多选项(以及关于SO的问题)可以进行这种操作
我会给出一个data.table
解决方案,因为我喜欢这种查询的简单语法
提高大型数据集的效率。我还提供了一个非常简单的子集语法。(.SD 引用由i
and创建的子集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
births_2001 <- subset(my.data, year == 2001)
births_2001[which.max(births_2001$births),]
## Country year births
## 45 Swaziland 2001 501
有很多方法可以做到这一点。我会分解它,以便您希望看到发生了什么更好的事情。
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
> aggregate(.~ year,data=my.data, FUN= max)
这也将解决问题。