You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在R语言中为列表内数据框的行名添加对应列表名称

解决列表中DataFrame行名添加对应列表名称的问题

你的代码问题出在which(l %in% x)无法正确获取当前元素的列表名称——列表里的每个DataFrame是独立对象,%in%的匹配逻辑在这里不生效,而且默认的lapply只传递元素本身,没把对应名称传进去。以下是两种可行的解决方法:

方法一:基础R实现

直接遍历列表的名称,针对每个名称对应的DataFrame修改行名:

l <- list(a=data.frame(col = c(1,2,3),row.names = c("k","l","m")), b=data.frame(col = c(4,5,6), row.names = c("o","p","r"))) 

lapply(names(l), function(nm) {
  df <- l[[nm]]
  rownames(df) <- paste(nm, rownames(df), sep = ".")
  df
}) %>% setNames(names(l))

方法二:tidyverse(purrr)实现

用purrr::imap函数,它会自动同时传递列表元素和对应的名称,代码更简洁:

library(purrr)
library(dplyr)

l <- list(a=data.frame(col = c(1,2,3),row.names = c("k","l","m")), b=data.frame(col = c(4,5,6), row.names = c("o","p","r"))) 

imap(l, function(df, nm) {
  df %>% `row.names<-`(paste(nm, rownames(df), sep = "."))
})

两种方法执行后,l$a的行名都会变成a.k、a.l、a.m,l$b的行名变成b.o、b.p、b.r,符合你的需求。

内容的提问来源于stack exchange,提问作者python_programmer

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.05 04:00:47