r - 更改变量值——重复的 ID

标签 r

我有这个数据集

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/

相关文章:

r - 如何保持数据框中每个ID的第一次出现

r - 一个充满零的矩阵 - R

r - 重新订购功能如何运作?

r - Shinyglide 条件按钮在第一个屏幕上不起作用

r - 使用基本R功能对POSIX日期(POSIXct)进行四舍五入

r - 在数据后面绘制网格,而不是在 R 前面

r - 在交互式 map 上叠加 shapefile 或栅格

r - 如何比较两个数据框?

R 的 read.csv 在第一列名称前面加上垃圾文本

r - 来自不同长度向量的样本(包括1个)