我有一个表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]]))),]
答案 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]])),]