我有这个数据集
id <- c(0,0,1,1,2,2,3,3,4,4)
gender <- c("m","m","f","f","f","f","m","m","m","m")
x1 <-c(1,1,1,1,2,2,3,3,10,10)
x2 <- c(3,7,5,6,9,15,10,15,12,20)
alldata <- data.frame(id,gender,x1,x2)
看起来像:
id gender x1 x2
0 m 1 3
0 m 1 7
1 f 1 5
1 f 1 6
2 f 2 9
2 f 2 15
3 m 3 10
3 m 3 15
4 m 10 12
4 m 10 20
请注意,对于每个唯一 id,x1 相似,但 x2 不同。我需要按 id 和 x2 对数据进行排序(从小到大) 然后对于每个唯一的 id,我需要设置 x1(第二条记录)= x2(第一条记录)。
数据看起来像:
id gender x1 x2
0 m 1 3
0 m 3 7
1 f 1 5
1 f 5 6
2 f 2 9
2 f 9 15
3 m 3 10
3 m 10 15
4 m 10 12
4 m 12 20
最佳答案
我发现使用 data.table
> library(data.table)
> dt = data.table(alldata)
> setkey(dt, id, x2) #sort the data
下一行表示:在 x1 的每个 ID 中,取 x1 的第一个值,然后根据需要从 x2 中取每个剩余值。
> dt[,x1 := c(x1[1], x2)[1:.N],keyby=id]
> dt
id gender x1 x2
1: 0 m 1 3
2: 0 m 3 7
3: 1 f 1 5
4: 1 f 5 6
5: 2 f 2 9
6: 2 f 9 15
7: 3 m 3 10
8: 3 m 10 15
9: 4 m 10 12
10: 4 m 12 20
关于r - 更改变量值——重复的 ID,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31950603/