Замена непоследовательных данных в кадре данных последовательными данными (повторяется для уникальных значений) - PullRequest
1 голос
/ 14 октября 2019

У меня есть набор данных, который выглядит следующим образом:

dat <- data.frame(x=c(1,1,2,2,7,7,8,8), y=c(rep(c(-1,-2),4)), 
                  z= c(0.5,0.6,0.6,0.4,0.3,0.3,0.5,0.5))

dat
  x  y   z
1 1 -1 0.5
2 1 -2 0.6
3 2 -1 0.6
4 2 -2 0.4
5 7 -1 0.3
6 7 -2 0.3
7 8 -1 0.5
8 8 -2 0.5

Значения x представляют собой числовые даты, для которых я строю графики значений y и z. Мне нужно заменить непоследовательные значения x последовательным вектором, чтобы данные стали

  x  y   z
1 1 -1 0.5
2 1 -2 0.6
3 2 -1 0.6
4 2 -2 0.4
5 3 -1 0.3
6 3 -2 0.3
7 4 -1 0.5
8 4 -2 0.5

Я попытался математически заменить значение с помощью цикла for, который разделяет данные на кадры данных с помощью уникального значения x,Это имеет две проблемы: во-первых, пробелы в данных по-прежнему существуют каждый раз, когда уникальные значения x используются в математической формуле, такой как данные $ x - min (alldata $ x), и, во-вторых, поскольку каждый результирующий кадр данных имеет только одно уникальное значение x Iне может заменить его в цикле и иметь уникальный результат для каждого значения x во всем наборе данных.

Я только начинаю с циклов, и мне кажется, что есть другой способ перебора данных для достижения требуемого результата, но я пока не смог понять это.

Ответы [ 2 ]

1 голос
/ 14 октября 2019

попробуйте заменить переменную x следующим образом:

as.numeric(factor(dat$x))

[1] 1 1 2 2 3 3 4 4

сначала вы конвертируете ее в множитель, а затем обратно в числовое значение

1 голос
/ 14 октября 2019

С dplyr это можно сделать с помощью group_indices

library(dplyr)
dat %>% 
    mutate(x = group_indices(., x))

В base R опция match

dat$x <- with(dat, match(x, unique(x)))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...