変数の 1 つの値に基づいて、data.frame から特定の行を抽出する必要がある場合があります。最大 ( ) と最小 ( )R
の組み込み関数があり、これらの行を簡単に抽出できます。which.max()
which.min()
中央値に相当するものはありますか?それとも、自分の関数を書くのが最善の策ですか?
以下は、data.frame の例と、 and の使用方法which.max()
ですwhich.min()
。
set.seed(1) # so you can reproduce this example
dat = data.frame(V1 = 1:10, V2 = rnorm(10), V3 = rnorm(10),
V4 = sample(1:20, 10, replace=T))
# To return the first row, which contains the max value in V4
dat[which.max(dat$V4), ]
# To return the seventh row, which contains the min value in V4
dat[which.min(dat$V4), ]
この特定の例では、観察数が偶数であるため、2 つの行 (この場合は行 2 と行 10) を返す必要があります。
アップデート
このための組み込み関数はないようです。そのため、Sacha からの返信を出発点として使用して、次の関数を作成しました。
which.median = function(x) {
if (length(x) %% 2 != 0) {
which(x == median(x))
} else if (length(x) %% 2 == 0) {
a = sort(x)[c(length(x)/2, length(x)/2+1)]
c(which(x == a[1]), which(x == a[2]))
}
}
次のように使用できます。
# make one data.frame with an odd number of rows
dat2 = dat[-10, ]
# Median rows from 'dat' (even number of rows) and 'dat2' (odd number of rows)
dat[which.median(dat$V4), ]
dat2[which.median(dat2$V4), ]
これを改善するための提案はありますか?