我有一個這樣的資料庫:
structure(list(code = c(1, 2, 3, 4), age = c(25, 30, 45, 50),
car = c(0, 1, 0, 1)), row.names = c(NA, -4L), class = c("tbl_df",
"tbl", "data.frame"))
我想在以下條件下創建一個“40 歲以下的司機”列:
- 0 如果 Age<40 & car==0
- 1 如果年齡<40 & 汽車==1
如何在此條件下創建第三列?我嘗試使用代碼“if else”來創建變數,但它不起作用。
drivers <- ifelse((age <= 40) & (car==0), 0, ifelse((age<=40) & (car==1), 1))
也許代碼寫錯了?還有另一種方法嗎?我害怕把括號弄亂,所以我更喜歡另一種方法,如果有更快的方法
uj5u.com熱心網友回復:
這是一個dplyr版本case_when
library(dplyr)
df %>%
mutate(drivers_under_40 = case_when(age <= 40 & car==0 ~ 0,
age <= 40 & car==1 ~ 1,
TRUE ~ NA_real_))
code age car drivers_under_40
<dbl> <dbl> <dbl> <dbl>
1 1 25 0 0
2 2 30 1 1
3 3 45 0 NA
4 4 50 1 NA
uj5u.com熱心網友回復:
一個base R選項
df1$drivers_under_40 <- with(df1, (age <= 40 & car == 1)* NA^(age> 40))
df1$drivers_under_40
[1] 0 1 NA NA
uj5u.com熱心網友回復:
除非您與您合作,否則您dplyr必須在 ifelse 陳述句中指定資料。例如資料$列。您還必須為操作分配一個新列。最后一個 else 陳述句丟失了。
所以你的 ifelse 陳述句應該是這樣的:
data = structure(list(code = c(1, 2, 3, 4), age = c(25, 30, 45, 50),
car = c(0, 1, 0, 1)), row.names = c(NA, -4L), class = c("tbl_df",
"tbl", "data.frame"))
data$drivers <- ifelse((data$age <= 40) & (data$car==0), 0, ifelse((data$age<=40) & (data$car==1), 1, "here you have to fill another 'else' value"))
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/510373.html
