r - 无论如何,有没有办法一起使用 dplyr 的滞后和超前函数

标签 r dplyr

我有几个看起来像这样的 *.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 中的 laglead 函数来实现此目的,但无法获得预期的输出。

最佳答案

您可以使用滚动操作,而不是使用leadlag,如果您的窗口大小增加/减小,滚动操作可以轻松适应。

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 使用 revlag 避免了上述的黑客方式。

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/

相关文章:

R插入符/gbm代码不会预测: dim(X) must have a positive length

r - 每 N 列拆分数据并使用 R 进行 rbind

r - R中的慢dplyr查询

r - R 中作为数据框的分类变量频率表

r - dplyr 中的 mutate_each/summarise_each : how do I select certain columns and give new names to mutated columns?

r - metafor:包括森林图中的数据,但不包括荟萃分析模型

R - 通过调节不同大小的序列来加速嵌套循环(矢量化?)

r - S4 对象组合不当行为?

r - 我们如何为 glmnet 指定自定义 lambda 序列

r - 计算R中融雪的开始日期