如何用apply系列函数、paste与collapse一行生成指定拼接向量?
问题描述
现有如下R语言列表形式的数据框:
mylist=list() mylist[['name1']]=data.frame(marker=LETTERS[1:3],values=1:3) mylist[['name2']]=data.frame(marker=LETTERS[1:2],values=11:12)
该列表的输出结构为:
mylist $name1 marker values 1 A 1 2 B 2 3 C 3 $name2 marker values 1 A 11 2 B 12
需要生成一个由列表名称与marker元素拼接而成的向量,格式示例为"A@name1",最终目标向量如下:
> markers_in_names [1] "A@name1" "B@name1" "C@name1" "A@name2" "B@name2"
如何使用apply系列函数、paste与collapse通过一行代码实现该需求?
解决方案
这里提供两种一行代码的实现方式:
方式一:使用lapply
markers_in_names <- unlist(lapply(names(mylist), function(nm) paste(mylist[[nm]]$marker, nm, sep = "@")))
方式二:使用Map(apply系列成员)
markers_in_names <- unlist(Map(function(df, nm) paste(df$marker, nm, sep = "@"), mylist, names(mylist)))
代码说明
- 先通过
names(mylist)拿到列表的所有名称(name1、name2) - 用
lapply或Map遍历每个列表元素及其对应名称,通过paste把每个marker值和列表名称用@拼接起来 - 最后用
unlist把返回的列表结构展开成一维向量,就得到了目标格式的结果
内容的提问来源于stack exchange,提问作者DaniCee
相关产品推荐
相关产品推荐

