用顺序数据替换数据帧中的非顺序数据(重复用于唯一值)

时间:2019-10-14 16:09:54

标签: r

我有一个看起来像这样的数据集:

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值(例如data $ x-min(alldata $ x))时,数据差距仍然存在,其次,因为每个结果数据帧仅具有单个唯一的x值I无法在循环中替换它,并且结果对于整个数据集的每个x值都是唯一的。

我只是从循环开始,我觉得好像有另一种方法可以遍历数据以实现所需的结果,但是我还无法弄清楚。

2 个答案:

答案 0 :(得分:1)

使用dplyr,可以使用group_indices

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

base R中,一个选项是match

dat$x <- with(dat, match(x, unique(x)))

答案 1 :(得分:1)

尝试像这样替换x变量:

as.numeric(factor(dat$x))

[1] 1 1 2 2 3 3 4 4

首先将其转换为因数,然后再转换为数字