我对在 R 中执行我想要的最佳方式有点迷茫。
我有一个包含几列的数据框。其中之一是用户和其他列,比如说数字(0,1,2,3,4,5)。有时用户会重复,但在这种情况下,列号应该有一个数字序列。可以是这样的:
user number column B column C
1 0 85 200
2 1 165 852
1 2 200 1000
3 0 15 689
3 1 89 896
4 0 78 582
4 2 96 586
我想获得的是:
user number status days
1 0 0 200
3 0 1 50 ->(value column C, user 3, number 1)-(value column B, user 3, number 0)
4 0 0 200
我想根据这些用户的值向数据框中添加两列。
- 如果用户有一个数字 == 0 但用户是唯一状态 == 0 并且天数 == 一些预定义的数字
- 如果用户有一个数字 == 0 并且用户不是唯一的
- 如果用户的第二次出现有一个数字 == 1,状态 == 1 并且天应该是从值列 C 的第二次出现用户 - 值列 B 的第一次用户出现的减法
- 如果用户的第二次出现有一个数字!= 1,状态 == 0 和天 == 一些预定义的数字
- 从数据集中删除没有编号 == 0 的用户
我问这个问题是因为我对最好的方法有点困惑。我虽然对数字 == 0 的数据帧进行子集化,然后比较数据帧之间的用户以查看重复的用户,但这也许不是最好的方法。
任何指示和想法都会很棒!
感谢您的帮助
编辑
B 列是自“2002-01-01”以来经过的天数。例如,第一个用户在 2002-01-01 后 85 天输入数据框
C 列是用户观察的天数。那些日子之后,用户不再在数据库中。
编辑2
我的数据集有 36 列和 26075 行
经过一些建议,我到目前为止在哪里。
#remove from dataset all users that don't have number == 0
df1 <- df[df$user %in% df[df$number == 0,1],]
df1["Status"] <- 0
#doesn't work
df1[df1$number == 1 %in% df1[duplicated(df1$user),]]
我试图做的是找到所有重复的用户,如果数字等于 1。之后尝试这样的事情:
df1[df1$number == 1 %in% df1[duplicated(df1$user),]] <- df1$Status == 1