0

こんにちは、各グループの最大数を特定してラベルを付けたいのですが、rでこれを行う方法を誰か教えてもらえますか(または、Excelの方が簡単かもしれません)? 以下はデータの例です。元のデータには左側の 2 列のみが含まれており、3 番目の列を生成したいと考えています。3 番目の列では、グループ内の最大値を 1 としてラベル付けしたいと思います。たとえば、グループ 1 では、最大値が .02874 であるため 1 としてマークし、それ以外の場合は 0 としてマークします。ありがとう!

    x <- read.table(header=T, text="group value largest
    1 0.02827 0
    1 0.02703 0
    1 0.02874 1
    2 0.03255 0
    2 0.10394 1
    2 0.03417 0
    3 0.13858 0
    3 0.16084 0
    3 0.99830 1
    3 0.24563 0")

更新: ご協力いただきありがとうございます。それらはすべて優れたソリューションです。

4

4 に答える 4

4

最後に、ベース (パッケージは不要) アプローチ:

is.largest <- function(x) as.integer(seq_along(x) == which.max(x))
x <- transform(x, largest = ave(value, group, FUN = is.largest))

私があなただったら、 を削除しas.integerて論理 ( TRUE/ FALSE) ベクトルを格納することに注意してください。

于 2013-10-10T20:12:15.130 に答える
2
library(data.table)
x <- data.table(x)

y <- x[,list(value = max(value), maxindicator = TRUE), by = c('group')]

z <- merge(x,y, by = c('group','value'), all = TRUE)

出力

> z
    group   value largest maxindicator
 1:     1 0.02703       0           NA
 2:     1 0.02827       0           NA
 3:     1 0.02874       1         TRUE
 4:     2 0.03255       0           NA
 5:     2 0.03417       0           NA
 6:     2 0.10394       1         TRUE
 7:     3 0.13858       0           NA
 8:     3 0.16084       0           NA
 9:     3 0.24563       0           NA
10:     3 0.99830       1         TRUE
于 2013-10-10T20:07:45.183 に答える
1

これが解決策plyrです:

x$largest <- 0
x <- ddply(x, .(group), function(df) {
    df$largest[which.max(df$value)] <- 1
    df
})

そして、ベース R を持つもの:

x$largest <- 0
l <- split(x, x$group)
l <- lapply(l, function(df) {
    df$largest[which.max(df$value)] <- 1
    df
})
x <- do.call(rbind, l)
于 2013-10-10T20:08:20.670 に答える
1

あまりクールではない基本的なアプローチを次に示します。

FUN <- function(x) {y <- rep(0, length(x)); y[which.max(x)] <- 1; y}
x$largest <- unlist(tapply(x$value, x$group, FUN))

##    group   value largest
## 1      1 0.02827       0
## 2      1 0.02703       0
## 3      1 0.02874       1
## 4      2 0.03255       0
## 5      2 0.10394       1
## 6      2 0.03417       0
## 7      3 0.13858       0
## 8      3 0.16084       0
## 9      3 0.99830       1
## 10     3 0.24563       0

ベースでやるのは予想以上に難しかったです。

于 2013-10-10T21:10:09.667 に答える