如何用 R 中字符串列表中的值替换数据框列表的行名?
How to replace rownames of a list of dataframes with values from a list of character strings in R?
设l
为两个数据帧的列表,n
为字符串列表,其中l
和n
都有两个元素。另外,让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
。在您的情况下,x
是 l
中的单个数据帧,而 value
是来自 n
的向量。此函数应用于“每个 ... 参数的第一个元素、第二个元素、第三个元素,依此类推。”,来自 ?mapply
.
并且“Map
是 mapply
的简单包装器,不会尝试简化结果”,参见 ?Map
设l
为两个数据帧的列表,n
为字符串列表,其中l
和n
都有两个元素。另外,让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
。在您的情况下,x
是 l
中的单个数据帧,而 value
是来自 n
的向量。此函数应用于“每个 ... 参数的第一个元素、第二个元素、第三个元素,依此类推。”,来自 ?mapply
.
并且“Map
是 mapply
的简单包装器,不会尝试简化结果”,参见 ?Map