[英]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.