假設我們有以下 data.table:
x_dt <- data.table(sexn = c(1,0,0,1,NA,1,NA), country = c("CHN", "JPN", "BGR", "AUT", " ", "TWN", " "), age=c(35,NA,40,NA,70,18,36))
我正在嘗試創建一個變數 asia_region,當國家為 %chin% c("CHN", "JPN", "KOR", "SGP", "TWN") 時值為 1,當國家為 0 時值為 0缺少國家/地區時不會丟失和不適用。
以下代碼在缺少國家/地區時填充 0。
result<-x_dt[ ,asia_region:=ifelse(country %chin% c("CHN", "JPN", "KOR", "SGP", "TWN"),1,0)]
uj5u.com熱心網友回復:
我們可以直接用as.integeror將邏輯強制轉換為二進制 ,然后通過在 'asia_region' 中的對應元素中指定邏輯條件并賦值 ( ) 來將值更改為NA'country' 為空的地方 ( "")i:=NA
x_dt[, asia_region := (country %chin% c("CHN", "JPN", "KOR", "SGP", "TWN"))]
x_dt[trimws(country) == "", asia_region := NA_integer_]
-輸出
> x_dt
sexn country age asia_region
1: 1 CHN 35 1
2: 0 JPN NA 1
3: 0 BGR 40 0
4: 1 AUT NA 0
5: NA 70 NA
6: 1 TWN 18 1
7: NA 36 NA
或者,如果我們需要一個ifelse/fifelse(if/else將不起作用,因為它沒有被矢量化,即它期望輸入運算式的長度為 1 且不超過該長度)
x_dt[, asia_region := fifelse(trimws(country) == "", NA_integer_,
fifelse(country %chin% c("CHN", "JPN", "KOR", "SGP", "TWN"), 1, 0))]
uj5u.com熱心網友回復:
怎么dplyr()解決?我會制作一個國家的向量,以便于參考:
asia_countries <- c("CHN", "JPN", "KOR", "SGP", "TWN")
x_dt |>
dplyr::mutate(asia_region = ifelse(country %in% asia_countries, 1, 0)) |>
dplyr::mutate(asia_region = ifelse(country == " ", NA, asia_region))
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/339996.html
上一篇:填充R向量中的小時-分鐘間隙
下一篇:如何在模式之前洗掉所有內容?
