我有一个78个数据框(list_of_df
)的列表,它们都具有相同的第一列,所有带注释的ensembl成绩单id:s,但它们的扩展名为“.1”,即(“ENST00000448914.1” “等等)我想删除它以便将它们与纯粹的ENST-ID相匹配。
我试图像这样在内部使用lapply:
lapply(list_of_df, function(x)
cbind(x,sapply(x$target_id, function(y) unlist(strsplit(y,split=".",fixed=T))[1])) )
但它需要永远,有没有人更好地了解如何做到这一点?
答案 0 :(得分:2)
我们遍历list
的{{1}},然后使用data.frames
删除第一列中的sub
后跟数字。
.
注意:即使OP的第一列是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
,这也应该有效。
factor
答案 1 :(得分:1)
您可以将代码简化为:
lapply(list_of_df, function(x) x[,1] = unlist(strsplit(x[,1], split=".", fixed=TRUE))[1])
如果您的列将 factor 作为类,则可以将x[,1]
包裹在as.character
中:
lapply(list_of_df, function(x) x[,1] = unlist(strsplit(as.character(x[,1]), split=".", fixed=TRUE))[1])
您还可以使用stringi
包:
library(stringi)
lapply(list_of_df, function(x) x[,1] = stri_split_fixed(x[,1], ".", n=1, tokens_only=TRUE))