R语言如何返回另一列最小n值对应的指定列行值
核心问题说明
你当前代码无法得到目标结果有两个核心原因:
- 你用
cbind()构造的对象是字符矩阵,不是数据框,不能用$运算符按列名取子集,且你构造时未指定列名,无法直接通过列名索引 - 原有逻辑错误调用了
rownames(),不需要取行名,直接按排序后的索引提取city列的取值即可
实现代码
先修正数据集定义
如果优先用数据框(更适合多类型字段的分析场景):
# 直接构造带列名的数据框 df <- data.frame( city = c("LA", "NY", "Rome"), c1 = c(1,1,2), c2 = c(0,1,0), c3 = c(0,1,2), sum = c(1,3,4) )
如果要保留矩阵结构,先补充列名:
df <- cbind(c("LA", "NY", "Rome"),c(1,1,2),c(0,1,0),c(0,1,2),c(1,3,4)) colnames(df) <- c("city","c1","c2","c3","sum")
提取目标城市
数据框场景下的代码:
# 按sum列升序排序后取前2行的city列值 top2_city <- df$city[order(df$sum)][1:2] # 拼接为逗号分隔的字符串 paste(top2_city, collapse = ", ")
矩阵场景下的代码:
top2_city <- df[order(df[,"sum"]),"city"][1:2] paste(top2_city, collapse = ", ")
运行后即可得到输出结果LA, NY。
内容的提问来源于stack exchange,提问作者Mathica
相关产品推荐
相关产品推荐

