R语言中如何通过行名和列名提取数据框的指定值?
按行名、列名提取R数据框指定值的解决方法
你之前的三行代码全部出现了R数据框索引的维度错位问题,因此始终无法返回预期值,错位原因逐行拆解如下:
- 代码
df["columnName"][["row Name 1"]]:第一层索引取出的是仅包含columnName列的子数据框,第二层用[["row Name 1"]]是在这个子数据框里寻找名为"row Name 1"的列,该子数据框不存在匹配的列,因此返回NULL。 - 代码
df$columnName[["row Name 1"]]:df$columnName取出的是columnName列对应的纯数值向量,向量本身不绑定行名索引,无法通过[["行名"]]的方式定位元素,因此返回NULL。 - 代码
df['columnName', 'row Name 1']:R数据框单方括号索引的固定格式是df[行标识, 列标识],你将行名、列名的位置完全颠倒——第一格本该放行名的位置放了列名,第二格本该放列名的位置放了行名,维度错位因此返回NA。
可正常返回目标值的写法
严格遵循df[目标行名, 目标列名]的索引规则编写,对应你需要提取的"row Name 1"行、"columnName"列的11这个值,直接使用的代码为:df["row Name 1", "columnName"]
等效的常用写法
- 双中括号分层索引:
df[["columnName"]]["row Name 1"],先取出目标列的向量,再通过行名匹配定位对应行的数值 - dplyr链式写法(适合数据分析流程中连贯使用):
df %>% dplyr::filter(rownames(df) == "row Name 1") %>% dplyr::pull(columnName)
排查提示:如果运行上述代码仍返回NA,可以先执行
rownames(df)打印所有实际行名,排查是否存在行名带前后隐藏空格、名称拼写不一致的问题。
内容的提问来源于stack exchange,提问作者S S
相关产品推荐
相关产品推荐

