第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會有你想問的

嵌套ifasser語句

嵌套ifasser語句

嗶嗶one 2019-07-06 17:48:21
嵌套ifasser語句我仍在學(xué)習(xí)如何將SAS代碼轉(zhuǎn)換為R,并收到警告。我需要弄清楚我在哪里犯錯(cuò)誤。我想要做的是創(chuàng)建一個(gè)變量來總結(jié)和區(qū)分一個(gè)人口的三個(gè)狀態(tài):大陸,海外,外國人。我有一個(gè)包含兩個(gè)變量的數(shù)據(jù)庫:ID國籍:idnat(法語、外國人)、如果idnat那么法語是:身份證出生地:idbp(內(nèi)地、殖民地、海外)我想總結(jié)一下idnat和idbp到一個(gè)名為idnat2:地位:K(內(nèi)地、海外、外國人)所有這些變量都使用“字符類型”。第2欄預(yù)期的結(jié)果:   idnat     idbp   idnat21  french mainland mainland2  french   colony overseas3  french overseas overseas4 foreign      foreign  foreign下面是我想在R中翻譯的SAS代碼:if idnat = "french" then do;    if idbp in ("overseas","colony") then idnat2 = "overseas";    else idnat2 = "mainland";end;else idnat2 = "foreigner";run;以下是我在R中的嘗試:if(idnat=="french"){     idnat2 <- "mainland"} else if(idbp=="overseas"|idbp=="colony"){     idnat2 <- "overseas"} else {     idnat2 <- "foreigner"}我收到這樣的警告:Warning message:In if (idnat=="french") { :   the condition has length > 1 and only the first element will be used我被建議使用“嵌套”ifelse“相反,它的輕松,但得到更多的警告:idnat2 <- ifelse (idnat=="french", "mainland",         ifelse (idbp=="overseas"|idbp=="colony", "overseas")       )             else (idnat2 <- "foreigner")根據(jù)警告消息,長度大于1,因此只考慮第一個(gè)括號之間的內(nèi)容。對不起,我不明白這個(gè)長度和這里有什么關(guān)系?有人知道我哪里錯(cuò)了嗎?
查看完整描述

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

您的困惑來自SAS和R如何處理if-etc結(jié)構(gòu)。在R,ifelse沒有向量化,這意味著它們檢查單個(gè)條件是否為真(即,if("french"=="french")無法處理多個(gè)邏輯(即,if(c("french","foreigner")=="french")R給你收到的警告。

相比之下,ifelse是矢量化的,因此它可以接受向量(也稱為輸入變量),并測試每個(gè)元素的邏輯條件,就像您習(xí)慣于在SAS中那樣。另一種讓你頭腦清醒的方法是用以下方法構(gòu)建一個(gè)循環(huán)ifelse語句(就像您在這里開始做的那樣),但是ifelse方法將更有效率,涉及的代碼通常更少。


查看完整回答
反對 回復(fù) 2019-07-06
?
慕運(yùn)維8079593

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


查看完整回答
反對 回復(fù) 2019-07-06
  • 3 回答
  • 0 關(guān)注
  • 563 瀏覽

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號