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

如何一次性修改R语言列表中多个数据框的行名?

批量修改列表中每个data.frame的行名

示例数据

df <- data.frame(A = 1:10, B = 1:10)
list1 <- list(df[1:3,],df[4:6,],df[7:10,])

原列表输出:

[[1]]
  A B
1 1 1
2 2 2
3 3 3

[[2]]
  A B
4 4 4
5 5 5
6 6 6

[[3]]
    A  B
7   7  7
8   8  8
9   9  9
10 10 10

需求

将列表中每个data.frame的行名改为从1开始的连续数字,期望输出:

[[1]]
  A B
1 1 1
2 2 2
3 3 3

[[2]]
  A B
1 4 4
2 5 5
3 6 6

[[3]]
    A  B
1   7  7
2   8  8
3   9  9
4  10 10

已尝试的代码

能生成目标行名,但无法应用到data.frame上:

lapply(list1,function(x){rownames(x) <- 1:dim(x)[1]})

输出结果仅为行名向量,而非修改后的data.frame:

[[1]]
[1] 1 2 3

[[2]]
[1] 1 2 3

[[3]]
[1] 1 2 3 4

解决方案

问题出在匿名函数只修改了行名,但没有返回修改后的data.frame。只需在函数末尾返回修改后的对象即可:

方法1:生成新列表

list2 <- lapply(list1, function(x) {
  rownames(x) <- 1:nrow(x)  # 用nrow(x)比dim(x)[1]更直观
  x  # 返回修改后的data.frame
})

方法2:直接修改原列表

如果想直接覆盖原列表,用lapply的结果重新赋值即可:

list1 <- lapply(list1, function(x) {
  rownames(x) <- seq_len(nrow(x))  # seq_len(nrow(x))与1:nrow(x)效果一致
  x
})

运行上述代码后,查看list1或list2就能得到符合要求的行名格式。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.11 09:32:36