在 dplyr 中使用 mutate 重新编码因子中的一系列(字符串)值
Recoding a range of (string) values in a factor using mutate in dplyr
我在一个因子中有一系列字符串值,我想重新编码。在级别中,有很长的因子级别(“601”、“602”、...、“689”),我想将其重新编码为单个数值 5001。
我尝试将 mutate 与 case_when 结合使用 dplyr,如图所示。这些代码适用于单个值,但我不知道如何在不逐行求助的情况下包含一系列字符串值的重新编码。
basecensusdata <- basecensusdata %>%
mutate(educval, case_when(
basecensusdata$P12 == "000" ~ 0,
basecensusdata$P12 == "010" ~ 100))
我想将范围(“601”到“689”)重新编码为新变量下的单个数值(比如 new_var)。如何做到这一点?
您可以创建一系列值来比较它们并将它们替换为您想要的数字。考虑一个示例,您想要使用 5001 将值从 3 更新为 5。
df <- data.frame(a = factor(1:10), b = letters[1:10])
df$new_var <- as.character(df$a)
df$new_var[df$a %in% 3:5] <- 5001
df
# a b new_var
#1 1 a 1
#2 2 b 2
#3 3 c 5001
#4 4 d 5001
#5 5 e 5001
#6 6 f 6
#7 7 g 7
#8 8 h 8
#9 9 i 9
#10 10 j 10
因为它是 factor
列,我们可以更改 levels
df$new_var <- df$Col
levels(df$new_var)[levels(df$new_var) %in% as.character(601:689)] <- "5001"
感谢您的建议。在我阅读这些之前,我实际上能够找到答案。这是我的解决方案:
首先,我为代码创建了一个代理变量。
df$factor2_num <- as.numeric(as.character(df$factor))
然后在我的 "case_when" 语句中,我输入以下内容:
如果((...case_when...
(df$factor_num >=601) & (df$factor_num <= 689) ~ 5953
...
效果很好。它符合这里的所有解决方案。谢谢!
我在一个因子中有一系列字符串值,我想重新编码。在级别中,有很长的因子级别(“601”、“602”、...、“689”),我想将其重新编码为单个数值 5001。
我尝试将 mutate 与 case_when 结合使用 dplyr,如图所示。这些代码适用于单个值,但我不知道如何在不逐行求助的情况下包含一系列字符串值的重新编码。
basecensusdata <- basecensusdata %>%
mutate(educval, case_when(
basecensusdata$P12 == "000" ~ 0,
basecensusdata$P12 == "010" ~ 100))
我想将范围(“601”到“689”)重新编码为新变量下的单个数值(比如 new_var)。如何做到这一点?
您可以创建一系列值来比较它们并将它们替换为您想要的数字。考虑一个示例,您想要使用 5001 将值从 3 更新为 5。
df <- data.frame(a = factor(1:10), b = letters[1:10])
df$new_var <- as.character(df$a)
df$new_var[df$a %in% 3:5] <- 5001
df
# a b new_var
#1 1 a 1
#2 2 b 2
#3 3 c 5001
#4 4 d 5001
#5 5 e 5001
#6 6 f 6
#7 7 g 7
#8 8 h 8
#9 9 i 9
#10 10 j 10
因为它是 factor
列,我们可以更改 levels
df$new_var <- df$Col
levels(df$new_var)[levels(df$new_var) %in% as.character(601:689)] <- "5001"
感谢您的建议。在我阅读这些之前,我实际上能够找到答案。这是我的解决方案:
首先,我为代码创建了一个代理变量。 df$factor2_num <- as.numeric(as.character(df$factor))
然后在我的 "case_when" 语句中,我输入以下内容:
如果((...case_when... (df$factor_num >=601) & (df$factor_num <= 689) ~ 5953 ...
效果很好。它符合这里的所有解决方案。谢谢!