R: поиск столбца с минимальным значением в каждой строке, когда есть связанный - PullRequest
4 голосов
/ 31 марта 2011

Вот мой пример данных:

>dat <- matrix(c(59,50,48,44,44,NA,78,59,42,67,51,NA,72,64,64),byrow=TRUE,ncol=3) 
>k <- apply(dat, 1, function(x) which(x == min(x, na.rm = TRUE)))
>k
[[1]]
[1] 3

[[2]]
[1] 1 2

[[3]]
[1] 3

[[4]]
[1] 2

[[5]]
[1] 2 3

Но я хочу вывод, подобный этому:

k
3 2 3 2 3

Большое спасибо заранее.

Ответы [ 3 ]

3 голосов
/ 31 марта 2011

Вы можете использовать max.col(-dat, "last"), но сначала вам нужно будет установить NA s на Inf.

3 голосов
/ 31 марта 2011

хотите ли вы максимальный индекс для каждой строки?тогда

> k <- apply(dat, 1, function(x) max(which(x == min(x, na.rm = TRUE))))
> k
[1] 3 2 3 2 3

сделает это.

2 голосов
/ 14 августа 2013

Вы можете использовать эту команду, чтобы применить некоторые функции к нескольким (выбранным) столбцам каждой строки. Здесь я использую это для создания нового столбца для максимум столбцов 1 и 2 (maxv12):

d2<-transform(d, maxv12=apply(d[,c(1,2)],1, max, na.rm = TRUE))

Мои исходные данные (d):

> head(d)
      V1     V2     V3     V4
1 2.0960 3.5364 2.2627 3.4358
2 1.7210 3.3172 1.6559 3.3083
3 1.7950 3.2874 2.2214 3.8520
4 2.0187 3.4038 1.9036 3.4158
5 1.8991 3.6274 1.8083 3.4552
6 1.7382 3.1765 2.6270 4.0960

И применение этой команды даст мне следующее:

> head(d2)
      V1     V2     V3     V4 maxv12
1 2.0960 3.5364 2.2627 3.4358 3.5364
2 1.7210 3.3172 1.6559 3.3083 3.3172
3 1.7950 3.2874 2.2214 3.8520 3.2874
4 2.0187 3.4038 1.9036 3.4158 3.4038
5 1.8991 3.6274 1.8083 3.4552 3.6274
6 1.7382 3.1765 2.6270 4.0960 3.1765
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...