数据框中的一列是列表。我想为列表中的每个数字添加一个数值,但结果的长度与原始数据框不匹配,因为某些列表包含多个元素。
下面是数据的一个例子
test <-data.frame("pep_index" = seq(1,6,1), "pep_start"=c(387,8464,33,57,100,7543), "pep_var_mod_pos"=c("000200020002000","00020000","2000000","00000000000","00220000000","000000002"))
test$pep_var_mod_index <- gregexec(pattern="2", test$pep_var_mod_pos)
test$pep_var_mod_index[test$pep_var_mod_index=="-1"] <- NA
head(test)
# pep_index pep_start pep_var_mod_pos pep_var_mod_index
# 1 1 387 000200020002000 4, 8, 12
# 2 2 8464 00020000 4
# 3 3 33 2000000 1
# 4 4 57 00000000000 NA
# 5 5 100 00220000000 3, 4
# 6 6 7543 000000002 9
''''
I have tried apply and ddply functions, e.g.
library(plyr)
test$pep_var_mod_res <- ddply(test, c("pep_index"), function(x) unlist(x$pep_var_mod_index) + x$pep_start )
但我没有得到我想要的结果,那就是:
# pep_index pep_start pep_var_mod_pos pep_var_mod_index pep_var_mod_res
# 1 1 387 000200020002000 4, 8, 12 391, 395, 399
# 2 2 8464 00020000 4 8468
# 3 3 33 2000000 1 34
# 4 4 57 00000000000 NA NA
# 5 5 100 00220000000 3, 4 103, 104
# 6 6 7543 000000002 9 7552
1条答案
按热度按时间hlswsv351#
您需要
mapply
或类似的代码来并行迭代pep_var_mod_index
和pep_start
。