所以我有一个数据框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
答案 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