我有一个包含 78 个数据帧 (list_of_df
) 的列表,它们都具有相同的第一列,其中包含所有带注释的 ensembl 转录本 id:s,但是它们的扩展名是“.1”,即 (“ENST00000448914.1”等),我想删除它以便将它们与纯 ENST-ID 进行匹配。
我尝试将 lapply 与内部的 sapply 一起使用,如下所示:
lapply(list_of_df, function(x)
cbind(x,sapply(x$target_id, function(y) unlist(strsplit(y,split=".",fixed=T))[1])) )
但这需要很长时间,有人知道如何做到这一点吗?
最佳答案
我们循环遍历 data.frames
的 list
,并使用 sub
删除 .
,然后使用第一列中的数字。
lapply(list_of_df, function(x) {
x[,1] <-sub('\\.\\d+', '', x[,1])
x })
#[[1]]
# target_id value
#1 ENST000049 39
#2 ENST010393 42
#[[2]]
# target_id value
#1 ENST123434 423
#2 ENST00838 23
注意:即使 OP 的第一列是 factor
,这也应该有效。
数据
list_of_df <- list(data.frame(target_id= c("ENST000049.1",
"ENST010393.14"), value= c(39, 42), stringsAsFactors=FALSE),
data.frame(target_id=c("ENST123434.42", "ENST00838.22"),
value= c(423, 23), stringsAsFactors=FALSE))
关于r - 更改列表中数据框中的列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34744267/