如何用 R 中字符串列表中的值替换数据框列表的行名?

How to replace rownames of a list of dataframes with values from a list of character strings in R?

l为两个数据帧的列表,n为字符串列表,其中ln都有两个元素。另外,让l中每个数据帧的行数等于n中字符串向量的长度。

l <- list(data.frame(x = c(1,2,3), y = c(1,2,3)),
          data.frame(x = c(1,2,3,4), y = c(1,2,3,4)))
n <- list(c('a', 'b', 'c'), c('a', 'b', 'c', 'd'))

假设我们要将l中两个dataframes的rownames替换为n中的字符串。期望的结果是:

> l
[[1]]
  x y
a 1 1
b 2 2
c 3 3

[[2]]
  x y
a 1 1
b 2 2
c 3 3
d 4 4

我相信有人可以利用 mapply 来完成这项任务,但我不知道该怎么做。

您可以使用rownames<-Map如下

Map(`rownames<-`, l, n)
# or mapply(`rownames<-`, x = l, value = n, SIMPLIFY = FALSE)

结果

#[[1]]
#  x y
#a 1 1
#b 2 2
#c 3 3
#
#[[2]]
#  x y
#a 1 1
#b 2 2
#c 3 3
#d 4 4

rownames<-x 的行名设置为 value。在您的情况下,xl 中的单个数据帧,而 value 是来自 n 的向量。此函数应用于“每个 ... 参数的第一个元素、第二个元素、第三个元素,依此类推。”,来自 ?mapply.

并且“Mapmapply 的简单包装器,不会尝试简化结果”,参见 ?Map