簡體   English   中英

在ifelse語句中創建並分配多個新的dataframe列?

[英]Create and assign multiple new dataframe columns in ifelse statement?

所以我有一個數據框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

ifelse語法已關閉,但我建議從dplyr庫中使用case_when

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 ,它看起來可能不太好,或者很難維護。

使用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)))

使用清單:

# 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 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM