想象一下,我有一个带有这些列的数据框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语句,但我一直遇到错误。
答案 0 :(得分:1)
哪些行符合标准?
> W = which((Df$Error==1 | Df$Error==0) & Df$Number==3)
现在设置行W-1
中的值,并使用9-Df$Error
在Error
为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