使用ifelse修改因子变量的水平

杰克斯

当我遇到这种奇怪的情况时,我想通过将两个级别组合为一个级别来修改因子变量中的级别。基本上,我的新关卡已创建,但其余所有关卡似乎都移到了下一个关卡。这是我的示例数据,使用的代码和输出。

library(tidyverse) 
data <- structure(list(factor1 = structure(c(1L, 1L, 2L, 3L, 1L, 2L, 
        1L, 1L, 2L, 2L, 2L, 2L, 2L, 1L, 2L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 
        1L, 1L, 1L, 3L, 1L, 1L, 1L, 4L), .Label = c("0", "1", "2", "3", 
        "4", "5", "6", "7"), class = "factor")), row.names = c(NA, -30L
        ), class = c("tbl_df", "tbl", "data.frame"), .Names = "factor1")
data_out <- data %>% mutate(factor1 = ifelse(factor1 %in% c('0', '1'), 
                                             factor1, '>1'))
structure(list(factor1 = c("1", "1", "2", ">1", "1", "2", "1", 
"1", "2", "2", "2", "2", "2", "1", "2", "1", "1", "1", "1", "1", 
"1", "1", "1", "1", "1", ">1", "1", "1", "1", ">1")), .Names = "factor1", 
class = c("tbl_df", "tbl", "data.frame"), row.names = c(NA, -30L))

这是可取的行为吗?在我看来,这当然不是。如何解释然后纠正呢?

红外光谱

我猜想这个问题与因素的构建方式有关。mutate还不清楚因素如何从{“ 0”,“ 1”}级别变为{“ 1”,“ 2”,“> 1”}级别

R因子实际上是基数为1的整数向量,具有作为其级别的属性。因此,您的“ 0”级别最初实际上是整数1,而您的“ 1”级别则是整数2。显然,该mutate函数适合创建带有附加级别的新因子,该因子打印为“> 1”,但也将“ 0”级别重新分配为新的“ 1”级别,并将“ 1”级别重新分配为“ 2”-水平。mutate对我来说,这似乎是一种危险的行为我认为它应该给了您一个新的因子,其级别为“ 0”,“ 1”,“> 1”,否则应该引发错误。

ifelse尽管来自mutate新列的问题也使问题复杂化错误来自如果强制data使用数据框,则会看到:

data$factor2 <- ifelse( data$factor1 %in% c('0', '1'), 
                                              data$factor1, '>1')
data
#-------- same issue except
   factor1 factor2
1        0       1
2        0       1
3        1       2
4        2      >1
.... delete the other 26 rows
> str(data)
'data.frame':   30 obs. of  2 variables:
 $ factor1: Factor w/ 8 levels "0","1","2","3",..: 1 1 2 3 1 2 1 1 2 2 ...
 $ factor2: chr  "1" "1" "2" ">1" ...

这会让您留在dplyr包中:

recode_factor(data$factor1, `0` = "0", `1` = "1", .default=">1")
 [1] 0  0  1  >1 0  1  0  0  1  1  1  1  1  0  1  0  0  0  0  0  0  0  0  0  0  >1 0  0  0  >1
Levels: 0 1 >1

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

修改数据框中的变量,仅适用于某些水平的因子(可能使用dplyr)

ifelse使因子“忘记”其水平顺序

使用2个水平因子变量的条件密度图

从因子变量中删除特定因子水平

根据因子水平计算变量

因子水平虚拟变量R

使用变量在数据框中同时使用因子名称和水平顺序来更改R中的因子水平

如何使用mutate和ifelse将数值变量转换为多级因子变量

串联使用mutate和ifelse来基于因子变量创建新的数字变量

用ifelse和替代方法分配因子水平

使用%>%即时指定因子水平

添加未使用的因子水平

计算因子水平之间的变量差异

区分R中的因子变量的水平

根据数值变量的水平编码新因子

R中的函数创建:使用因子水平作为自变量?

使用dplyr tidyr在汇总表中保留输入变量和因子水平的顺序

ifElse和使用变量?

如何自动修改间隔因子水平以获得更好的显示

使用R中因子自身的子集重命名因子水平

根据“ N”次连续出现的原始因子水平创建具有水平的新因子/变量

使用dplyr过滤R中的因子水平

使用数据框列更改因子水平

从多个因子变量创建一个新的因子变量,所有因子变量都具有相同的水平

如何使用dplyr修改因子列?

通过在 R 中使用 group by 有条件地聚合,为因子变量的水平生成列

如何获得R中每个因子变量的水平

tidyverse:因子的每个水平或数值变量的每个值的多个图

根据跨多列的因子水平计算多个变量的比例