如何基于另一列最大值提取列?求提取女性人数最多州名的R代码
解决R中提取女性人数最多州名的问题
我懂你之前为啥代码没生效——你用的max()函数返回的是女性人数的最大值本身,而不是这个最大值对应的行位置!拿这个数值去索引州名列,相当于在找第N行(N是那个超大的人数数字),这肯定不是你想要的结果呀。
下面给你两种靠谱的解决方法,按需选择:
方法一:基础R实现
1. 获取第一个女性人数最多的州名
用which.max()函数找到最大值所在的行索引,再用这个索引提取州名:
# 基础写法 df$State.name[which.max(df$female)] # 用with简化代码(避免重复写df$) with(df, State.name[which.max(female)])
2. 获取所有女性人数最多的州名(如果有多个州并列第一)
如果存在多个州的女性人数相同且都是最大值,上面的方法只会返回第一个,这时候可以用条件筛选:
# 筛选出所有女性人数等于最大值的州 df$State.name[df$female == max(df$female)]
方法二:tidyverse(dplyr)实现
如果你习惯用tidyverse的语法,代码会更直观:
library(dplyr) # 获取第一个女性人数最多的州名 df %>% slice_max(female, n = 1) %>% pull(State.name) # 获取所有女性人数最多的州名 df %>% filter(female == max(female)) %>% pull(State.name)
举个实际例子测试
假设你的数据集是这样的:
df <- data.frame( State.name = c("California", "Texas", "Florida", "New York"), female = c(19000000, 15000000, 11000000, 19000000) )
- 用
which.max()会返回"California"(第一个最大值的州) - 用条件筛选会返回
c("California", "New York")(所有并列第一的州)
内容的提问来源于stack exchange,提问作者Vinayak Sharma
相关产品推荐
相关产品推荐

