Вопрос:

установить номер для начала отсчета в г

r

9 просмотра

1 ответ

1 Репутация автора

Я хочу установить номер для начала подсчета тех же данных в строке

dat <- read.table(header = TRUE, text = "chrom   position    strand  value   label
chr1       17432    -           0   romeo
chr1       17433    -           0   romeo
chr1       17434    -           0   romeo
chr1       17435    -           0   romeo
chr1       17409    -           1   juliet
chr1       17410    -           1   juliet
chr1       17411    -           1   juliet")

#set the starting count number for romeo
number = 2

#set the starting count number for romeo
juliet= 3

#install.packages('dplyr')
library(dplyr)
dat %>%
    group_by(label) %>%
    mutate(number = 1:n())

dat <- read.table(header = TRUE, text = "chrom   position    strand  value   label
chr1       17432    -           0   romeo
chr1       17433    -           0   romeo
chr1       17434    -           0   romeo
chr1       17435    -           0   romeo
chr1       17409    -           1   juliet
chr1       17410    -           1   juliet
chr1       17411    -           1   juliet")


#install.packages('dplyr')
library(dplyr)
dat %>%
    group_by(label) %>%
    mutate(number = 1:n())

chrom position       value      label         number
chr1    17432   -   0          romeo             2
chr1    17433   -   0          romeo             3
chr1    17434   -   0          romeo             4
chr1    17435   -   0          romeo             5
chr1    17409   -   1          juliet            3
chr1    17410   -   1          juliet            4
chr1    17411   -   1          juliet            5
Автор: Kiko Rosario Источник Размещён: 14.08.2019 01:50

Ответы (1)


0 плюса

74538 Репутация автора

Мы можем создать фрейм данных с labelих начальным значением, чтобы он масштабировался и мог вместить столько, labelsсколько мы хотим.

lkup <- data.frame(label = c("romeo", "juliet"), number = c(2, 3))

Затем мы можем объединить два кадра данных, получить начальное значение и добавить его к текущему номеру строки, чтобы получить новый number

library(dplyr)

dat %>%
   left_join(lkup, by = "label")  %>%
   group_by(label) %>%
   mutate(number = row_number() + number - 1)
   #Or same as OP's attempt
   #mutate(number = 1:n() + number - 1)

#  chrom position strand value label  number
#  <fct>    <int> <fct>  <int> <fct>   <dbl>
#1 chr1     17432 -          0 romeo       2
#2 chr1     17433 -          0 romeo       3
#3 chr1     17434 -          0 romeo       4
#4 chr1     17435 -          0 romeo       5
#5 chr1     17409 -          1 juliet      3
#6 chr1     17410 -          1 juliet      4
#7 chr1     17411 -          1 juliet      5

В базе R мы можем использовать mergeс aveиспользованием той же логики

dat$number <- with(merge(dat, lkup, by = "label", all.x = TRUE), 
              number + ave(number, label, FUN = seq_along) - 1)
Автор: Ronak Shah Размещён: 14.08.2019 01:57
Вопросы из категории :
32x32