在R数据帧中,如果我想将列值更改为另一个值,但仅当它等于3个不同的值时

时间:2017-03-06 15:17:55

标签: r if-statement math dataframe arithmetic-expressions

我在R中有一个名为QCEW_County_Denominated的数据框。在这个数据框中,我有一个名为Industry的列。每当此列的值为[31-33],[44-45]或[48-49] - 实际值 - 而不是值范围时,我想分别将值更改为31,44和48。关于如何格式化的任何建议?如果 - 那么R中的陈述是我最薄弱的一点,所以我想我会在这里问。

3 个答案:

答案 0 :(得分:0)

结帐case_when()

library('dplyr')
x <- data.frame(industry = rep(c("[31-33]","[44-45]","[48-49]"), each = 4))
x %>% 
 mutate(industry_n = case_when(.$industry == "[31-33]" ~ 31, 
                               .$industry == "[44-45]" ~ 44, 
                               .$industry == "[48-49]" ~ 48))

或者如果您拥有dplyrdevtools::install_github("hadley/dplyr")的开发版本,则可以运行:

x %>% 
 mutate(industry_n = case_when(industry == "[31-33]" ~ 31, 
                               industry == "[44-45]" ~ 44, 
                               industry == "[48-49]" ~ 48))

答案 1 :(得分:0)

或者就像这样:

df <- data.frame(Industry = rep(c("[31-33]","[44-45]","[48-49]"), each = 4), stringsAsFactors = F)
df$Industry[df$Industry=="[31-33]"] <- 31
df$Industry[df$Industry=="[44-45]"] <- 44
df$Industry[df$Industry=="[48-49]"] <- 48

答案 2 :(得分:0)

Lucy的代码是理想的。

但是,如果由于某种原因你不打算使用dplyr(虽然我没有看到你不应该这样做的原因),你可以使用嵌套if函数:

x$new <- ifelse(x$industry == "[31-33]", 31, ifelse(x$industry == "[44-45]", 44, ifelse(x$industry == "[48-49]", 48, x$industry)))

诸如此类