2012-09-18 105 views
3

當列C = X的值時,如何找到一列(列B)的最大值。我如何保留列A中的標籤。說我的數據被稱爲my.data,列a =國家名稱,列b =出生的孩子的數量,列C =孩子出生的年份。那麼如何找到2001年出生的兒童的最大數量,保持國家的名字?當另一列中的值爲X時,查找一列的最大值X

謝謝你,我很抱歉,我是新至R

回答

5

有R中的許多選項(和做題)做這種手術的

我會給出一個解決方案data.table因爲我喜歡這種查詢

data.table

對於大數據集的效率容易語法。我也爲子集提供了一個非常簡單的語法。 (.SD引用由iby創建的子集)

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 
3

有很多方法可以做到這一點。我會分解它,所以你可以希望看到更好的事情。

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 
2
> aggregate(.~ year,data=my.data, FUN= max) 

這也將解決這個問題。

相關問題