我对R中的多个ifelse函数的组合有疑问。尝试运行以下行时,我得到的结果仅为“其他”。
standardized_object_codes <- ifelse(Spending_1$OBJECT_CODE %in% c("GG"), "Grants",
ifelse(Spending_1$OBJECT_CODE %in% c("SW"),"Salaries and Wages",
ifelse(Spending_1$OBJECT_CODE %in% c("DR"), "Retirement",
ifelse(Spending_1$OBJECT_CODE %in% c("DO"), "Nonretirement",
ifelse(Spending_1$OBJECT_CODE %in% c("PC"), "Contracts", "Other")))))
这绝对不正常,因为我的数据包含以上功能(GG,SW,DR,DO和PC)中列出的所有目标代码。您能帮我解决我做错的事情吗?
非常感谢!
答案 0 :(得分:0)
作为我上面评论的后续内容,您可以尝试
standardized_object_codes <- with(Spending_1, dplyr::case_when(
OBJECT_CODE == "GG" ~ "Grant",
OBJECT_CODE == "SW" ~ "Salaries and Wages",
OBJECT_CODE == "DR" ~ "Retirement",
OBJECT_CODE == "DO" ~ "Nonretirement",
OBJECT_CODE == "PC" ~ "Contracts",
TRUE ~ "Other"))
或者创建一个查找表,然后使用match
来匹配条目。
df.lookup <- data.frame(
OBJECT_CODE = c("GG", "SW", "DR", "DO", "PC"),
Description = c("Grant", "Salaries and Wages", "Retirement", "Nonretirement", "Contracts"),
stringsAsFactors = F)
standardized_object_codes <- replace(
x <- df.lookup$Description[match(Spending_1$OBJECT_CODE, df.lookup$OBJECT_CODE)],
is.na(x), "Other")
答案 1 :(得分:0)
您可以使用因子标签:
lev = c("GG", "SW", "DR", "DO", "PC","others")
lab = c("Grant", "Salaries and Wages", "Retirement", "Nonretirement", "Contracts","others")
#Now change everything not in lev to "others"
newf = ifelse(Spending_1$OBJECT_CODE %in% lev, Spending_1$OBJECT_CODE, "others")
as.character(factor(newf, lev, lab)) #change all names at once
答案 2 :(得分:0)
在数据框中提供矢量时,您的代码似乎可以正常工作。
> Spending_1 <- data.frame(OBJECT_CODE = c("GG", "SW", "DR", "DO", "PC", "Other"))
> standardized_object_codes <- ifelse(Spending_1$OBJECT_CODE %in% c("GG"), "Grants",
ifelse(Spending_1$OBJECT_CODE %in% c("SW"),"Salaries and Wages",
ifelse(Spending_1$OBJECT_CODE %in% c("DR"), "Retirement",
ifelse(Spending_1$OBJECT_CODE %in% c("DO"), "Nonretirement",
ifelse(Spending_1$OBJECT_CODE %in% c("PC"), "Contracts", "Other")))))
> standardized_object_codes
[1] "Grants" "Salaries and Wages" "Retirement"
[4] "Nonretirement" "Contracts" "Other"
如果没有获得所需的结果,则可能与数据的结构方式或代码的应用方式有关。