把有很多层次的因子变量重新编码成假人?

2024-05-19 12:36:29 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在处理包含230多个变量的数据集,其中我有60个分类变量,有6个以上的级别(无法进行优先排序,例如:Color)

我的问题是关于任何函数,它可以帮助我重新编码这些变量,而不需要手工操作,这需要大量的工作和时间,并有可能犯许多错误!在

我可以使用Rpython,所以请随意推荐最有效的函数来完成这项工作。在

假设,我有一个名为df的数据集,阶乘列集是

clm=(clm1, clm2,clm3,....,clm60)

所有这些因素都有很多层次:

^{pr2}$

非常感谢你的帮助!在


Tags: 数据函数编码df排序错误时间分类
6条回答

下面是一个使用model.matrix的简短示例,可以让您开始:

df <- data.frame(
    clm1 = gl(2, 6, 12, c("clm1.levelA", "clm1.levelB")),
    clm2 = gl(3, 4, 12, c("clm2.levelA", "clm2.levelB", "clm2.levelC")));
#          clm1        clm2
#1  clm1.levelA clm2.levelA
#2  clm1.levelA clm2.levelA
#3  clm1.levelA clm2.levelA
#4  clm1.levelA clm2.levelA
#5  clm1.levelA clm2.levelB
#6  clm1.levelA clm2.levelB
#7  clm1.levelB clm2.levelB
#8  clm1.levelB clm2.levelB
#9  clm1.levelB clm2.levelC
#10 clm1.levelB clm2.levelC
#11 clm1.levelB clm2.levelC
#12 clm1.levelB clm2.levelC



as.data.frame.matrix(model.matrix(rep(0, nrow(df)) ~ 0 + clm1 + clm2, df));
#   clm1clm1.levelA clm1clm1.levelB clm2clm2.levelB clm2clm2.levelC
#1                1               0               0               0
#2                1               0               0               0
#3                1               0               0               0
#4                1               0               0               0
#5                1               0               1               0
#6                1               0               1               0
#7                0               1               1               0
#8                0               1               1               0
#9                0               1               0               1
#10               0               1               0               1
#11               0               1               0               1
#12               0               1               0               1

python3中使用pandas,可以执行以下操作:

import pandas as pd
df = pd.DataFrame({'clm1': ['clm1a', 'clm1b', 'clm1c'], 'clm2': ['clm2a', 'clm2b', 'clm2c']})
pd.get_dummies(df)

更多示例请参见documentation。在

在R中模型.矩阵@Maurits Evers提出的方法是,除第一个因素外,该函数降低每个因素的第一个水平。有时这是你想要的,但有时不是(取决于@Maurits Evers强调的问题)。在

有几个函数分散在不同的包中来实现这一点(例如packagecaret请参见here中的几个示例)。在

我使用了以下受@Jaap的Stack Overflow answer启发的函数

#' 
#' Transform factors from a data.frame into dummy variables (one hot encoding)
#' 
#' This function will transform all factors into dummy variables with one column
#' for each level of the factor (unlike the contrasts matrices that will drop the first
#' level). The factors with only two levels will have only one column (0/1 on the second 
#' level). The ordered factors and logicals are transformed into numeric.
#' The numeric and text vectors will remain untouched.
#' 
^{pr2}$

示例:

^{3}$

于2018年3月19日由reprex package(v0.2.0)创建。在

相关问题 更多 >