在ifelse语句中创建并分配多个新的dataframe列?

时间:2018-05-03 11:16:20

标签: r if-statement dataframe dplyr

所以我有一个数据框my_df如下

my_df <- data.frame(c("0600", "0602", "0603"))

现在我需要编写ifelse语句,该语句计算另外3个变量并将其附加到新数据框。

我无法了解如何在循环中添加多个可执行语句,并将计算出的变量附加到新数据框。

以下是ifelse声明的代码。

with(my_df, ifelse(my_df$H == "0600",{d$D <- 1+1 & d$c <- "0600"},
    ifelse(my_df$H == "0602",{d$D <- 2+1 & d$c <- "0602"},
        { d$D <- 3+1 & d$c <- "0603"}
)))

我能够在ifloop内只有一个可执行代码的情况下将值附加到新数据帧,即如果我只有{d$D <- 1+1}它可以正常工作但是当我有多个语句要执行时失败。

我的输出数据框应如下所示,

D    C
2    0600
3    0602
4    0603

3 个答案:

答案 0 :(得分:3)

您的ifelse语法已关闭,但我建议您使用case_when库中的dplyr

library(dplyr)
d$D <- case_when(
    my_df$H == "0600" ~ 1+1,
    my_df$H == "0602" ~ 2+1,
    TRUE ~ 3+1
)

d$c <- case_when(
    my_df$H == "0600" ~ "0600",
    my_df$H == "0602" ~ "0602",
    TRUE ~ "0603"
)

你也可以使用ifelse,但是你需要对ifelse进行嵌套调用,它可能看起来不太好,或者非常易于维护。

答案 1 :(得分:1)

使用Base R

my_df <- data.frame("C" = c("0600", "0602", "0603"))
my_df$D  <- ifelse(my_df$C=="0600",2,ifelse(my_df$C=="0602",3,ifelse(my_df$C=="0603",4,NA)))

答案 2 :(得分:1)

使用列表:

# My data frame
my_df <- data.frame(H = c("0600", "0602", "0603"))

# My list to be used as a lookup
my_list <- list("0600" = c(D = 2, C = "0600"),
                "0602" = c(D = 3, C = "0602"),
                "0604" = c(D = 4, C = "0603"))

# Find corresponding values for 'H' 
# Then bind into a data frame
do.call(bind_rows, my_list[my_df$H])

结果:

# A tibble: 3 x 2
#   D     C    
# <chr> <chr>
# 1 2     0600 
# 2 3     0602 
# 3 4     0603