我有以下資料框:
df <- data.frame(Business_Date = c("01/01/2018", "01/01/2019", "01/01/2020"), Business_Date_2019 = c("01/01/2019","01/01/2019","01/01/2019"), Television = c("A","B","C"))
我想創建第四列,其中包含 2019 年特定日期的電視:
desired_output <- data.frame(Business_Date = c("01/01/2018", "01/01/2019", "01/01/2020"), Business_Date_2019 = c("01/01/2019","01/01/2019","01/01/2019"), Television = c("A","B","C"),
Television_2019 = c("B","B","B"))
但是,當我寫:
df$Television_2019 <- case_when(
df$Business_Date == df$Business_Date_2019 ~ df$Television,
TRUE ~ NA_character)
它不回傳所需的輸出:
Business_Date Business_Date_2019 Television Television_2019
1 01/01/2018 01/01/2019 A <NA>
2 01/01/2019 01/01/2019 B B
3 01/01/2020 01/01/2019 C <NA>
由于第 1 行和第 3 行在第二列中也有"01/01/2019",我也想"B"在第四列中回傳這些行。
如何撰寫一個從df回傳desired_output的腳本?
uj5u.com熱心網友回復:
您可以通過創建一個命名向量來用作查找表來完成此操作:
tv_lookup <- setNames(df$Television, df$Business_Date)
df$Television_2019 <- tv_lookup[df$Business_Date_2019]
df
# Business_Date Business_Date_2019 Television Television_2019
# 1 01/01/2018 01/01/2019 A B
# 2 01/01/2019 01/01/2019 B B
# 3 01/01/2020 01/01/2019 C B
原因case_when(df$Business_Date == df$Business_Date_2019)沒有給你你想要的,因為它會將 in 中的每個元素與in 中相同位置的Business_Date_2019元素進行比較。使用您的示例資料,這將導致:Business_Date
"01/01/2018" == "01/01/2019" # FALSE, therefore <NA>
"01/01/2019" == "01/01/2019" # TRUE, therefore "B"
"01/01/2020" == "01/01/2019" # FALSE, therefore <NA>
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/444469.html
上一篇:R函式應用于資料框中的串列
