如果满足条件,则向列和上一行添加值

时间:2017-04-04 11:45:06

标签: 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

Df的:

RT   Error Number ThirdColumn
0.2  0     4      0
0.3  0     4      0
0.3  1     3      0
0.4  0     4      0
0.2  1     3      0  
0.2  0     4      0
0.3  0     3      0

现在我想修改在Error == 1&amp;之前的ThirdColumn中的0。数字== 3,含8 以及在错误== 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语句,但我一直遇到错误。

3 个答案:

答案 0 :(得分:1)

哪些行符合标准?

> W = which((Df$Error==1 | Df$Error==0) & Df$Number==3)

现在设置行W-1中的值,并使用9-Df$ErrorError为0时使用9,在Error为1时使用> 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

library IEEE;
use IEEE.std_logic_1164.all;

entity input_output_adder is
    port (
        input_a : in  std_logic_vector(4 downto 0);
        input_b : in  std_logic_vector(4 downto 0);
        output  : out std_logic_vector(4 downto 0)
        );
end entity;

architecture rtl of input_output_adder is
    use IEEE.numeric_std.all;
begin
    output <= std_logic_vector(unsigned(input_a) + resize((unsigned(input_b) * 2), 5));
end architecture;

答案 1 :(得分:0)

我们可以使用which

执行此操作
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

答案 2 :(得分:0)

我们可以使用lead中的dplyr来获取列的前导值。

library(dplyr)
Df$ThirdColumn <- with(Df, ifelse(lead(Error) == 1 & lead(Number == 3), 8, 
                           ifelse(lead(Error) == 0 & lead(Number) == 3, 9, 0)))

在这种情况下,最后一个数字将返回NA,稍后可以轻松地将其更改为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