您好我会说明我想要做的事情,因为通过一个例子更容易理解我的需求。
我有一个数据框: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的思想值复制到NewThought列中的上一行。哪会给我们:
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]]
答案 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