3 回答

TA貢獻(xiàn)1804條經(jīng)驗(yàn) 獲得超8個(gè)贊
# some sample dataidnat <- sample(c("french","foreigner"),100,TRUE)idbp <- rep(NA,100)idbp[idnat=="french"] <- sample(c("mainland","overseas","colony"),sum(idnat=="french"),TRUE)# recodingout <- ifelse(idnat=="french" & !idbp %in% c("overseas","colony"), "mainland", ifelse(idbp %in% c("overseas","colony"),"overseas", "foreigner"))cbind(idnat,idbp,out) # check result
if
else
if("french"=="french")
if(c("french","foreigner")=="french")
ifelse
if
else
ifelse

TA貢獻(xiàn)1876條經(jīng)驗(yàn) 獲得超5個(gè)贊
如果數(shù)據(jù)集包含許多行,則使用data.table而不是嵌套ifelse().
提供了下面的查找表
lookup
idnat idbp idnat2
1: french mainland mainland
2: french colony overseas
3: french overseas overseas
4: foreign foreign foreign
和一個(gè)樣本數(shù)據(jù)集
library(data.table)
n_row <- 10L
set.seed(1L)
DT <- data.table(idnat = "french",
idbp = sample(c("mainland", "colony", "overseas", "foreign"), n_row, replace = TRUE))
DT[idbp == "foreign", idnat := "foreign"][]
idnat idbp
1: french colony
2: french colony
3: french overseas
4: foreign foreign
5: french mainland
6: foreign foreign
7: foreign foreign
8: french overseas
9: french overseas
10: french mainland
然后我們可以做一個(gè)加入時(shí)更新:
DT[lookup, on = .(idnat, idbp), idnat2 := i.idnat2][]
idnat idbp idnat2
1: french colony overseas
2: french colony overseas
3: french overseas overseas
4: foreign foreign foreign
5: french mainland mainland
6: foreign foreign foreign
7: foreign foreign foreign
8: french overseas overseas
9: french overseas overseas
10: french mainland mainland
- 3 回答
- 0 關(guān)注
- 563 瀏覽
添加回答
舉報(bào)