R-函数which()无法带来正确的输出

时间:2018-06-27 16:50:17

标签: r

我有一个表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 :(得分:1)

如果我对您的理解是正确的,那么您希望所有信息都针对某一变量具有最小值的行。

如果您要这样做,可以尝试which.min

使用R会话中存在的mtcars数据集:

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

上面将获取mtcars数据中具有mpg字段最小值的记录(行)。

#> 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]])),]