【发布时间】:2018-10-31 09:25:10
【问题描述】:
如果某个值出现在现有行中,我有一个关于创建新列的问题。
N=5
T=5
time<-rep(1:T, times=N)
id<- rep(1:N,each=T)
dummy<- c(0,0,1,1,0,0,0,1,0,0,0,1,0,1,0,0,0,0,0,0,1,0,0,1,0)
df <- data.frame(id, time, dummy)
id time dummy
1 1 1 0
2 1 2 0
3 1 3 1
4 1 4 1
5 1 5 0
6 2 1 0
7 2 2 0
8 2 3 1
9 2 4 0
10 2 5 0
11 3 1 0
12 3 2 1
13 3 3 0
14 3 4 1
15 3 5 0
16 4 1 0
17 4 2 0
18 4 3 0
19 4 4 0
20 4 5 0
21 5 1 1
22 5 2 0
23 5 3 0
24 5 4 1
25 5 5 0
在这种情况下,我们有一些横截面中出现了多个 1。现在我尝试为每个额外的 1 创建一个新的虚拟变量/列。之后,对于每个虚拟,每个横截面的行也应该在第一个 1 出现后用 1 填充。我可以通过在每一列上使用 group_by(id) 和 cummax 函数来填充行。但是如何在不手动遍历每个横截面的情况下获得新变量?所以我想实现以下目标:
id time dummy dummy2
1 1 1 0 0
2 1 2 0 0
3 1 3 1 0
4 1 4 1 1
5 1 5 1 1
6 2 1 0 0
7 2 2 0 0
8 2 3 1 0
9 2 4 1 0
10 2 5 1 0
11 3 1 0 0
12 3 2 1 0
13 3 3 1 0
14 3 4 1 1
15 3 5 1 1
16 4 1 0 0
17 4 2 0 0
18 4 3 0 0
19 4 4 0 0
20 4 5 0 0
21 5 1 1 0
22 5 2 1 0
23 5 3 1 0
24 5 4 1 1
25 5 5 1 1
谢谢! :)
【问题讨论】:
-
as.data.frame(cbind(.))太糟糕了!我会编辑的。 -
不明白你的意思。为什么每个数据帧中的
dummy不同?不清楚。
标签: r