用字符串重新编码变量的问题

时间:2017-02-07 19:25:12

标签: r

目标

我试图使用来自不同变量的值并根据特定标准在R中创建一个分类(例如字符串)变量。

问题

这似乎并没有实际重新编码数据。我正在改造数据,但我不确定以哪种方式。

数据描述

我有一个以国家/月分析单位构建的数据框。其中一个变量是governance,并且是连续的。它的范围从0.750到4.333。

采取的步骤

我正在尝试创建一个分类变量,在其中我为4个不同的广泛治理组创建标签。

以下是我的尝试:

syndromes$syndrome_cat <- NA
syndromes$syndrome_cat[syndromes$governance <= 1.645] <- "Category 1"
syndromes$syndrome_cat[syndromes$governance >= 1.646 & syndromes$governance <= 2.541] <- "Category 2"
syndromes$syndrome_cat[syndromes$governance >= 2.542 & syndromes$governance <= 3.437] <- "Category 3"
syndromes$syndrome_cat[syndromes$governance >= 3.438] <- "Category 3"

不幸的是,这不会导致列出不同的值,而是会产生这样的结果:

summary(variable)
Length     Class       Mode 
14256      character   character

当我检查数据时,我看到了:

head(syndromes$governance)
[1] NA NA NA NA NA NA

我做错了什么?

提前谢谢!

2 个答案:

答案 0 :(得分:2)

只需使用此功能(如@Rich Scriven也建议的那样),您也可以通过包含/排除区间的左/右侧来更改cut的默认行为:

syndromes$syndrome_cat <- cut(syndromes$governance, breaks=c(-Inf,1.645, 2.541, 3.437,Inf), 
                                                    labels=paste('Category', 1:4))

答案 1 :(得分:1)

使用dplyr

mydf %>% 
    mutate(group = case_when(.$governance < 1.646 ~ 'Cat1',
                       between(.$governance, 1.646, 2.541) ~ 'Cat2',
                       between(.$governance, 2.542, 3.437) ~ 'Cat3',
                       .$governance > 3.438 ~ 'Cat4'))