对R来说,这是很新的一段时间,但似乎没能让它起作用。我正在尝试创建一个名为peo$Tier的列。它有三个级别,("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))
}发布于 2019-12-01 14:53:36
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))https://stackoverflow.com/questions/59126634
复制相似问题