使用 R 将前几行分组为正值,然后是另一组为负值,依此类推 数据

问题描述

我有一个如下所示的数据框:

name       strand

thrL       1

thrA       1

thrB       1

yaaA       -1

yaaJ       -1

talB       1

mog        1

我想将前几个正值分组为一组,将负值分组为一组,将下一个正值分组为另一组,如下所示:

name       strand     directon

thrL       1           1

thrA       1           1

thrB       1           1

yaaA       -1          2

yaaJ       -1          2

talB       1           3

mog        1           3

我正在考虑使用 dplyr,但我需要一些有关使用 R 的代码的帮助。非常感谢。

解决方法

使用rle

df$direction <- with(rle(sign(df$strand)),rep(seq_along(values),lengths))
df

#  name strand direction
#1 thrL      1         1
#2 thrA      1         1
#3 thrB      1         1
#4 yaaA     -1         2
#5 yaaJ     -1         2
#6 talB      1         3
#7  mog      1         3

这可以用 data.table rleid 缩短。

df$direction <- data.table::rleid(sign(df$strand))
,

我们也可以这样做

df1$direction <- inverse.rle(within.list(rle(sign(df1$strand)),values <- seq_along(values)))
df1$direction
#[1] 1 1 1 2 2 3 3

数据

df1 <- structure(list(name = c("thrL","thrA","thrB","yaaA","yaaJ","talB","mog"),strand = c(1L,1L,-1L,1L)),class = "data.frame",row.names = c(NA,-7L))

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...