我有几个看起来像这样的 *.txt 文件
ID BP
Id1 A
Id2 A
Id3 T
Id4 C
Id5 A
Id6 T
Id7 A
Id8 T
我想要每个 ID BP 的前 4 个字符和 BP 的后 2 个字符
类似于:
Id5 A CTAA TA
Id6 T TACT AT
我试图通过使用 dplyr 中的 lag
和 lead
函数来实现此目的,但无法获得预期的输出。
最佳答案
您可以使用滚动操作,而不是使用lead
和lag
,如果您的窗口大小增加/减小,滚动操作可以轻松适应。
library(dplyr)
library(zoo)
df %>%
mutate(result1 = lag(rollapplyr(BP, 4, function(x)
paste0(rev(x), collapse = ''), fill = NA)),
result2 = rollapply(BP, 2, align = 'left', function(x)
paste0(rev(x), collapse = ''), fill = NA))
# ID BP result1 result2
#1 Id1 A <NA> AA
#2 Id2 A <NA> TA
#3 Id3 T <NA> CT
#4 Id4 C <NA> AC
#5 Id5 A CTAA TA
#6 Id6 T ACTA AT
#7 Id7 A TACT TA
#8 Id8 T ATAC <NA>
@G 的建议。 Grothendieck 使用 rev
和 lag
避免了上述的黑客方式。
df %>%
mutate(result11 = rollapply(BP,list(-(1:4)), paste, collapse = '', fill = NA),
result2 = rollapply(BP, list(1:2), paste, collapse = '', fill = NA))
关于r - 无论如何,有没有办法一起使用 dplyr 的滞后和超前函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65839033/