列C=Xの場合、1つの列(列B)の最大値をどのように見つけますか。列Aからラベルを保持するにはどうすればよいですか。データの名前がmy.data、列a =国名、列であるとします。 b =生まれた子供の数、列C=子供が生まれた年。では、国の名前を並べたまま、2001年に生まれた子供の最大数をどのように見つけるのでしょうか。
ありがとう、ごめんなさい、私はRに不慣れです
これを行うにはいくつかの方法があります。うまくいけば、何が起こっているのかをよりよく理解できるように、それを分割します。
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
この種の操作を行うためのR(およびSOに関する質問)には多くのオプションがあります
data.table
この種のクエリの簡単な構文が好きなので、解決策を示します
大規模なデータ セットの効率化のため。また、サブセット化のための非常に簡単な構文も提供します。i
(.SD は、およびによって作成されたサブセットを参照します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
> aggregate(.~ year,data=my.data, FUN= max)
これで問題も解決します。