簡體   English   中英

如何迭代多個向量

[英]How to iterate over multiple vectors

對 R 相當陌生。已經為此工作了一段時間,但似乎無法正常工作。 我正在嘗試創建一個名為peo$Tier的列。 它有 3 個級別, ("1", "2", "3")

tier1 <- c("ADP TOTAL SOURCE INC", "A 1 HR A DIVISION OF OASIS OUTSOURCING INC", "COADVANTAGE CORP", "INSPERITY INC", "OASIS ACQUISITION INC", "OASIS ACQUISITION INC A PAYCHEX CO", "OASIS DHR LLC", "OASIS OUTSOURCING CONTRACT II INC", "OASIS OUTSOURCING INC", "PAYCHEX BUSINESS SOLUTIONS LLC", "PAYCHEX HR OUTSOURCING LLC", "TRINET GROUP INC", "TRINET HR II HOLDINGS INC", "TRINET HR IV LLC")
tier2 <- c("ALLY HR LLC DBA MATRIXONESOURCE", "ALPHASTAFF GROUP INC", "CHOICE EMPLOYER SOLUTIONS INC", "CORNERSTONE CAPITAL GROUP INC", "DECISION HR", "FLORIDA RESOURCE MANAGEMENT LLC", "FRANKCRUM 2 INC", "IMPACT STAFF LEASING LLC", "JUSTWORKS EMPLOYMENT GROUP LLC", "KYMBERLY GROUP PAYROLL SOLUTIONS INC", "OCMI III INC DBA PEOPAYGO", "REGIS GROUP HOLDINGS INC", "SOUTH EAST PERSONNEL LEASING INC", "STAFFLINK OUTSOURCING INC", "THE S2 HR GROUP LLC", "TLR OF BONITA INC", "WORKFORCE BUSINESS SERVICES INC")

如果peo$Tier變量在向量tier1中,將分配“1”。 如果peo$Tier變量在向量tier2中,將分配“2”。 否則將分配“3”。 這些向量值來自另一個名為peo$NAMED.INSURED的列,共有 208 個唯一字符。

我嘗試了子集化,但它只適用於向量中的第一個值。 我嘗試了一個 for 循環但得到了錯誤:

較長的物體長度不是較短物體長度的倍數

不確定如何完成此任務。 請幫忙。

for (i in 1:length(peo$NAMED.INSURED)) {
    peo$Tier[i] <- ifelse(peo$NAMED.INSURED == tier1, 1, ifelse(peo$NAMED.INSURED == tier2, 2, 3))
}

ifelse是矢量化的,當您比較多個值時使用%in%而不是==

所以在這種情況下你可以做

peo$Tier <- with(peo, ifelse(NAMED.INSURED %in% tier1, 1, 
                      ifelse(NAMED.INSURED %in% tier2, 2, 3)))

我們還可以使用case_when中的dplyr

library(dplyr)
peo %>%
 mutate(Tier = case_when(NAMED.INSURED %in% tier1 ~ 1, 
                         NAMED.INSURED %in% tier2 ~ 2, 
                         TRUE ~3))

我們還可以使用算術來重新編碼值

peo$Tier <- with(peo,  as.integer(factor(1 +  2* NAMED.INSURED %in% tier1 +
          4 * NAMED.INSURED %in% tier2)))

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM