我有一个看起来像这样的数据集:
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值都是唯一的。
我只是从循环开始,我觉得好像有另一种方法可以遍历数据以实现所需的结果,但是我还无法弄清楚。
答案 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
首先将其转换为因数,然后再转换为数字