R 在上一组中添加具有可变值的列
我有如下数据,其中每个R 在上一组中添加具有可变值的列,r,dplyr,data.table,R,Dplyr,Data.table,我有如下数据,其中每个id在每个时间都有一个状态。我想添加一列prev_status,显示上一次时间中status的值 set.seed(10); library(dplyr); library(data.table) df <- data.table(time = sample(1:3, 20, T), status = sample(letters[1:15], 20, T) )[order(time) ][, id :=
id
在每个时间都有一个状态
。我想添加一列prev_status
,显示上一次时间中status
的值
set.seed(10); library(dplyr); library(data.table)
df <- data.table(time = sample(1:3, 20, T),
status = sample(letters[1:15], 20, T)
)[order(time)
][, id := 1:.N, by = time]
time status id
1: 1 j 1
2: 1 g 2
3: 1 k 3
4: 1 m 4
5: 1 d 5
6: 1 c 6
7: 1 m 7
8: 1 o 8
9: 2 m 1
10: 2 l 2
11: 2 l 3
12: 2 f 4
13: 2 i 5
14: 2 b 6
15: 2 n 7
16: 2 g 8
17: 2 l 9
18: 2 k 10
19: 3 f 1
20: 3 h 2
是否有更好的方法来实现这一点,即为整个data.frame创建prev_status
?我对dplyr
和数据持开放态度。table
解决方案(以及base R)。dplyr
有一个lag()
函数,使这一过程变得简单
df %>%
arrange(time) %>%
group_by(id) %>%
mutate(prev_status=lag(status))
没想到会这么容易。将data.table
解决方案放在这里以备将来参考:df[订单(时间)][,prev_状态:=shift(状态),by=id]
@Renu当您与DT[i][…]链接时,对原始表的引用被破坏。如果您改为df[order(time),prev_status:=shift(status),by=id]
,则新列将添加到原始表中。
df %>%
arrange(time) %>%
group_by(id) %>%
mutate(prev_status=lag(status))