简体   繁体   English

如何迭代多个向量

[英]How to iterate over multiple vectors

Fairly new to R. Been working on this for a while but can't seem to get it working.对 R 相当陌生。已经为此工作了一段时间,但似乎无法正常工作。 I am trying to create a column called peo$Tier .我正在尝试创建一个名为peo$Tier的列。 It has 3 levels, ("1", "2", "3")它有 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")

If peo$Tier variable is in vector tier1 , "1" will be assigned.如果peo$Tier变量在向量tier1中,将分配“1”。 If peo$Tier variable is in vector tier2 , "2" will be assigned.如果peo$Tier变量在向量tier2中,将分配“2”。 Else "3" will be assigned.否则将分配“3”。 These vector values come from another column called peo$NAMED.INSURED and there is a total of 208 unique character.这些向量值来自另一个名为peo$NAMED.INSURED的列,共有 208 个唯一字符。

I tried subsetting but it only worked for the first value within the vector.我尝试了子集化,但它只适用于向量中的第一个值。 I tried a for loop but getting the error:我尝试了一个 for 循环但得到了错误:

longer object length is not a multiple of shorter object length较长的物体长度不是较短物体长度的倍数

Not sure how to accomplish this task.不确定如何完成此任务。 Please help.请帮忙。

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 is vectorised and when you are comparing more than one value use %in% and not == . ifelse是矢量化的,当您比较多个值时使用%in%而不是==

So in this case you can do所以在这种情况下你可以做

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

We can also use case_when from dplyr我们还可以使用case_when中的dplyr

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

We can also use arithmetic to recode the values我们还可以使用算术来重新编码值

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