如何更改列表中 Dataframe 的行名称,并在R中添加它们自己的列表名称?

4ngedf3f  于 2023-01-18  发布在  其他
关注(0)|答案(3)|浏览(201)

我尝试通过将列表中每个 Dataframe 的名称添加到行名称中来更改它们的row.names
List为:

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")))

我尝试了这个方法,但无法添加索引名称ab

lapply(l,function(x) {x %>% `row.names<-` (paste(names(l)[which(l %in% 
x)],rownames(x),sep = "."))})

l$a为:
| row.names|山坳|
| - ------|- ------|
| k|1个|
| 升|第二章|
| 米|三个|
但应该是这样的:
| row.names|山坳|
| - ------|- ------|
| 又名|1个|
| 动脉|第二章|
| 上午|三个|
我该怎么办?先谢谢你。

wpx232ag

wpx232ag1#

我们可以不迭代列表,而是迭代列表的名称,这样在将名称粘贴在一起时可以有更好的控制。
这是根据您的尝试修改的:

setNames(lapply(names(l), 
                \(x) l[[x]] %>% `row.names<-` (paste(x, rownames(l[[x]]), sep = "."))), 
         names(l))

$a
    col
a.k   1
a.l   2
a.m   3

$b
    col
b.o   4
b.p   5
b.r   6
xe55xuns

xe55xuns2#

使用mapply的方法

mapply(function(lis, nm){rownames(lis) <- paste0(nm, ".", rownames(lis))
    list(lis)},
  dlis, names(dlis))
$a
    col
a.k   1
a.l   2
a.m   3

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

6jjcrrmo3#

1)rbind使用rbind创建具有所需行名称的单个数据框,然后将其拆分回原始数据框。

split(do.call("rbind", l), rep(names(l), sapply(l, nrow)))

2)数据.帧使用data.frame及其row.names=参数以避免row.names<-

rnames <- function(x, nm) data.frame(x, row.names = paste0(nm, ".", rownames(x)))
Map(rnames, l, names(l))

3)for使用for循环创建ll

ll <- l
for(nm in names(ll)) rownames(ll[[nm]]) <- paste0(nm, ".", rownames(ll[[nm]]))

相关问题