【发布时间】:2021-09-15 17:47:45
【问题描述】:
我是 R 新手,最近开始使用列表。
我有一个数据框列表,其中一个数据框看起来像这样:
pos <- c("chr1","chr1","chr1")
end <- c("205","206","207")
cpy <- c("4,4","3,3","4,4")
df1 <- as.data.frame(cbind(pos,end,cpy))
df1
pos end cpy
1 chr1 205 4,4
2 chr1 206 3,3
3 chr1 207 4,4
我想做一些操作,将前两列组合起来,用“:”分隔,然后拆分第三列,只保留第一个元素。我找到了一种使用 tidyr 包中的 unite 和 strsplit 的简单方法:
library(tidyr)
df1 <- unite(df1, pos, sep=":", c("pos","end"))
df1$cpy <- sapply(strsplit(df1$cpy,","), `[`, 1)
df1
pos cpy
1 chr1:205 4
2 chr1:206 3
3 chr1:207 4
现在我想对列表中的所有数据框执行此操作。比如我想要这个
mylist
$df1
pos end cpy
1 chr1 205 4,4
2 chr1 206 3,3
3 chr1 207 4,4
$df2
pos end cpy
1 chr1 205 3,4
2 chr1 206 4,5
3 chr1 207 6,6
变成这样
mylist
$df1
pos cpy
1 chr1:205 4
2 chr1:206 3
3 chr1:207 4
$df2
pos cpy
1 chr1:205 3
2 chr1:206 4
3 chr1:207 6
正如我所说,我是 R 新手,甚至是列表新手。我正在尝试将lapply 与unite 和strsplit 一起使用,但它不起作用。是否可以在lapply(X, FUN, ...) 中使用任何类型的函数,或者我是否必须编写自己的函数以及如何轻松地做到这一点?或者如果你能推荐一些在线资料来帮助我学习解决这个问题的技巧,我也非常感激!
【问题讨论】: