R - функция, которая (), которая не приносит правильный вывод - PullRequest
0 голосов
/ 27 июня 2018

У меня есть таблица temp1, которая имеет 2 столбца «Hospital.Name» и «инфаркт» и 1 переменную с именем «colname»

colname <- "heart attack"

Hospital.Name                      heart attack
ROUND ROCK MEDICAL CENTER           14.9  
CYPRESS FAIRBANKS MEDICAL CENTER    12.0

Я пытаюсь привести запись с наименьшим числом «сердечного приступа», но я получаю ошибку в моей формуле, она ничего не приносит, вот что у меня есть:

temp1[which(temp1[[colname1]] == min(as.numeric(temp1[[colname1]]))),]
[1] Hospital.Name heart attack 
<0 rows> (or 0-length row.names)

не приносит результатов

но я знаю, что правильная часть формулы верна, потому что когда я использую

min(as.numeric(temp1[[colname1]]))
[1] 12

Я получаю минимальный результат из колонки "сердечный приступ"

Пожалуйста, помогите мне с моей формулой:

temp1[which(temp1[[colname1]] == min(as.numeric(temp1[[colname1]]))),]

1 Ответ

0 голосов
/ 27 июня 2018

Если я вас правильно понял, вам нужна вся информация по строке, для которой одна из переменных имеет минимальное значение.

Вы можете попробовать which.min, если это то, что вы хотите сделать.

с использованием набора данных mtcars, присутствующего в сеансе R:

mtcars[which.min(mtcars$mpg),]

Выше будет выбрана запись (строка), которая имеет минимальное значение поля mpg в данных mtcars.

#> mtcars[which.min(mtcars$mpg),]
#                    mpg cyl disp  hp drat   wt  qsec vs am gear carb
#Cadillac Fleetwood 10.4   8  472 205 2.93 5.25 17.98  0  0    3    4

Теперь, если вы используете which так, как вы использовали в своем наборе данных, вы можете получить что-то вроде этого:

mtcars[which(mtcars[[colname1]] == min(mtcars[[colname1]])),]

Это даст две записи, как показано ниже:

#> mtcars[which(mtcars[[colname1]] == min(mtcars[[colname1]])),]
#                     mpg cyl disp  hp drat    wt  qsec vs am gear carb
#Cadillac Fleetwood  10.4   8  472 205 2.93 5.250 17.98  0  0    3    4
#Lincoln Continental 10.4   8  460 215 3.00 5.424 17.82  0  0    3    4

Мораль истории which.min производит первые экземпляры логического совпадения, но which может дать вам оба экземпляра совпадения, если существует несколько записей одного и того же минимального значения.

Из документации:

Определяет местоположение, то есть индекс (первого) минимума или максимума числового (или логического) вектора.

В вашем случае это может быть что-то вроде:

temp1[which.min(temp1[,colname]) ,]

В случае, если это не числовое значение, а делать что-то за один шаг, разбейте его для простоты.

  temp1[,colname] <- as.numeric(temp1[,colname]) ##numeric conversion
  temp1[which.min(temp1[,colname]) ,]

где colname = "сердечный приступ" по вашему вопросу

Если вы используете приведенный ниже код, вы можете иметь несколько записей, также кажется, вы написали правильный код , ваш код не работает, потому что у вас есть опечатка между colname и colname1

temp1[which(temp1[[colname]] == min(temp1[[colname]])),]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...