将引用行的值分配给上一行

时间:2017-05-31 13:40:58

标签: r data-science

您好我会说明我想要做的事情,因为通过一个例子更容易理解我的需求。

我有一个数据框:df

ID  Thought    NewThought
1   0          0
2   0          0
3   0          0
4   0          0
5   1          0
6   0          0
7   1          0

我想将大于0的思想值复制到NewT​​hought列中的上一行。哪会给我们:

ID  Thought    NewThought
1   0          0
2   0          0
3   0          0
4   0          1
5   1          0
6   0          1
7   1          0

我试过这个,但它无法正常工作

setDT(Df)[which(Thought > 0)-1, NewThought := Thought[+1]]

2 个答案:

答案 0 :(得分:1)

只需将列向上移动一段......

df$NewThought <- c(df$Thought[-1],0)

df
  ID Thought NewThought
1  1       0          0
2  2       0          0
3  3       0          0
4  4       0          1
5  5       1          0
6  6       0          1
7  7       1          0

在回答后续问题时,您可以查看前面的3行,

df$NewThought3 <- c(sapply(1:(nrow(df)-1),function(i) 
                    max(df$Thought[(i+1):max(i+3,nrow(df))],na.rm=TRUE))
                    ,0)

df
  ID Thought NewThought NewThought3
1  1       0          0           1
2  2       0          0           1
3  3       0          0           1
4  4       0          1           1
5  5       1          0           1
6  6       0          1           1
7  7       1          0           0

答案 1 :(得分:1)

 df$NewThought[which(df$Thought>0) - 1] <- df$Thought[df$Thought > 0] 
 df
  ID Thought NewThought
1  1       0          0
2  2       0          0
3  3       0          0
4  4       0          1
5  5       1          0
6  6       0          1
7  7       1          0