R语言 数据框列中列表元素的算术函数

7tofc5zh  于 2023-06-27  发布在  其他
关注(0)|答案(1)|浏览(97)

数据框中的一列是列表。我想为列表中的每个数字添加一个数值,但结果的长度与原始数据框不匹配,因为某些列表包含多个元素。
下面是数据的一个例子

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
hlswsv35

hlswsv351#

您需要mapply或类似的代码来并行迭代pep_var_mod_indexpep_start

test$pep_var_mod_res = with(test, mapply("+", pep_start, pep_var_mod_index))

test                            
#   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

相关问题