更改列表中数据框中的列

时间:2016-01-12 12:54:14

标签: r list dataframe lapply

我有一个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])) ) 

但它需要永远,有没有人更好地了解如何做到这一点?

2 个答案:

答案 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))