R 中的 USArrests data.frame - 哪个州(行)呈现最小和最大的犯罪率(列)

USArrests data.frame in R - which state (row) presents the smallest and the largest crime rate (column)

我在 R 中使用 USArrests data.frame,我需要查看每种犯罪(谋杀、袭击和强奸)中哪个州的犯罪率最低和最高。 我想我必须计算每项犯罪的最大和最小值,我已经做到了。

which(USArrests$Murder == min(USArrests$Murder)) [1] 34

问题是我无法检索第 34 行中的状态,只能检索整行:

USArrests[34,] Murder Assault UrbanPop Rape North Dakota 0.8 45 44 7.3

我刚开始使用 R,请问有人可以帮助我吗?

州名似乎存储为 rowname。您可以使用 rownames 函数访问 dataframerownames

要查找向量列中具有最小值的元素,您可以使用 which.min 函数。

我们确实有:

> USArrests[which.min(USArrests$Murder), "Murder"]
[1] 0.8

因此,您的命令变为:

> rownames(USArrests)[which.min(USArrests$Murder)]
[1] "North Dakota"

我通常会建议对这样的问题采取不同的方法,但为了方便起见,我将提供以下解决方案,也许稍后会以更深思熟虑的方式回来。

您可以使用 attributes() 函数查看数据帧的特定 'attributes'。

例如:

attributes(USArrests)

将为您提供以下输出。

$names
[1] "Murder"   "Assault"  "UrbanPop" "Rape"    

$class
[1] "data.frame"

$row.names
 [1] "Alabama"        "Alaska"         "Arizona"        "Arkansas"       "California"     "Colorado"      
 [7] "Connecticut"    "Delaware"       "Florida"        "Georgia"        "Hawaii"         "Idaho"         
[13] "Illinois"       "Indiana"        "Iowa"           "Kansas"         "Kentucky"       "Louisiana"     
[19] "Maine"          "Maryland"       "Massachusetts"  "Michigan"       "Minnesota"      "Mississippi"   
[25] "Missouri"       "Montana"        "Nebraska"       "Nevada"         "New Hampshire"  "New Jersey"    
[31] "New Mexico"     "New York"       "North Carolina" "North Dakota"   "Ohio"           "Oklahoma"      
[37] "Oregon"         "Pennsylvania"   "Rhode Island"   "South Carolina" "South Dakota"   "Tennessee"     
[43] "Texas"          "Utah"           "Vermont"        "Virginia"       "Washington"     "West Virginia" 
[49] "Wisconsin"      "Wyoming"     

所以现在我们知道数据框由 'names'(费用名称)、'row.names'(州名)组成,并且 'class' 是一个数据框。作为 R 的新手,请务必注意,在上面的结果中,行 ID 仅为每行的第一项提供。这在最后一步会更有意义。

利用这些知识,我们可以通过执行以下操作使用属性来查找状态:

attributes(USArrests)$row.names

要在列表中找到您标识为北达科他州的第 34 个州,我们可以简单地给出该州的行 ID,如下所示。

attributes(USArrests)$row.names[34]

哪个会给你....

[1] "North Dakota"

同样,这可能不是最优雅的方法,但它适用于您的场景。

希望这对您有所帮助,祝您编码愉快。

编辑

正如我提到的,通常有一种更优雅、更高效、更高效的做事方式。这是实现您的目标的另一种方法。

row.names(USArrests)[which.min(USArrests$Murder)]

您可能会立即看到此处发生的情况,但本质上,我们要求的是与谋杀指控的最低价值相关联的行名称。这又给出了...

[1] "North Dakota"

您现在可以应用此逻辑来查找每项犯罪的最高和最低犯罪率的州。例如,对于最大攻击

row.names(USArrests)[which.max(USArrests$Assault)]

给予...

[1] "North Carolina"