R 如果满足条件,则向列和上一行添加值
假设我有一个带有这些列的数据帧dfR 如果满足条件,则向列和上一行添加值,r,R,假设我有一个带有这些列的数据帧df RT Error Number 0.2 0 4 0.3 0 4 0.3 1 3 0.4 0 4 0.2 1 3 0.2 0 4 0.3 0 3 我所做的是添加一列,我用它 Df["ThirdColumn"] <- 0 现在我想修改第三列中错误==1和数字==3加8之前的0 第三列中的0位于错误==0和数字==3和9之前 预期结果 RT Error N
RT Error Number
0.2 0 4
0.3 0 4
0.3 1 3
0.4 0 4
0.2 1 3
0.2 0 4
0.3 0 3
我所做的是添加一列,我用它
Df["ThirdColumn"] <- 0
现在我想修改第三列中错误==1和数字==3加8之前的0
第三列中的0位于错误==0和数字==3和9之前
预期结果
RT Error Number ThirdColumn
0.2 0 4 0
0.3 0 4 8
0.3 1 3 0
0.4 0 4 8
0.2 1 3 0
0.2 0 4 9
0.3 0 3 0
我尝试了几个if语句,但不断出现错误。我们可以使用
哪个
library(data.table)
setDT(Df)[which(Error==1 & Number==3)-1, ThirdColumn := 8]
Df[which(Error==0 & Number==3)-1, ThirdColumn := 9]
Df
# RT Error Number ThirdColumn
#1: 0.2 0 4 0
#2: 0.3 0 4 8
#3: 0.3 1 3 0
#4: 0.4 0 4 8
#5: 0.2 1 3 0
#6: 0.2 0 4 9
#7: 0.3 0 3 0
我们也可以使用
base R
i1 <- with(Df, which(Error ==1 & Number == 3)-1)
i2 <- with(Df, which(Error ==0 & Number == 3)-1)
Df$ThirdColumn[i1] <- 8
Df$ThirdColumn[i2] <- 9
i1哪些行符合标准
> W = which((Df$Error==1 | Df$Error==0) & Df$Number==3)
现在设置行W-1
中的值,并使用9-Df$Error
在Error
为0时获得9,在Error
为1时获得8:
> Df$ThirdColumn[W-1] = 9-Df$Error[W]
>
> Df
RT Error Number ThirdColumn
1 0.2 0 4 0
2 0.3 0 4 8
3 0.3 1 3 0
4 0.4 0 4 8
5 0.2 1 3 0
6 0.2 0 4 9
7 0.3 0 3 0
我们可以使用dplyr
中的lead
来获取列的前导值
library(dplyr)
Df$ThirdColumn <- with(Df, ifelse(lead(Error) == 1 & lead(Number == 3), 8,
ifelse(lead(Error) == 0 & lead(Number) == 3, 9, 0)))
谢谢你akrun我会尝试一下,如果它有效的话,我会回来投票的。有一个很好的答案。谢谢你,我对你的答案投了赞成票,虽然stack没有考虑,因为我的帐户是新的,在我看来,这个答案是其他答案中最容易理解的。
library(dplyr)
Df$ThirdColumn <- with(Df, ifelse(lead(Error) == 1 & lead(Number == 3), 8,
ifelse(lead(Error) == 0 & lead(Number) == 3, 9, 0)))
Df$ThirdColumn[nrow(Df)] <- 0
Df
# RT Error Number ThirdColumn
#1 0.2 0 4 0
#2 0.3 0 4 8
#3 0.3 1 3 0
#4 0.4 0 4 8
#5 0.2 1 3 0
#6 0.2 0 4 9
#7 0.3 0 3 0