将分类列转换为R

问题描述 投票:0回答:1
flags = data.frame(Reduce(cbind, lapply(levels(d$purpose), function(x){(d$purpose == x)*1}) )) names(flags) = levels(d$purpose) d = cbind(d, flags) # Include the new columns as input variables levelnames = paste(names(flags), collapse = " + ") neuralnet(paste("output ~ ", levelnames), d)

inter convertter r r的分类变量r r n n ann(neuralnet)

我对R的新手很新。有人可以分解这个复杂的代码正在做的事情吗?


Edit: inimplone @nongkrong的建议我遇到了一个问题:

CSV:

X1,X2,X3 A,D,Q B,E,R C,F,S B,G,T C,H,U A,D,Q

R:

newData <- read.csv("new.csv") newerData <- model.matrix(~ X1 + X2 + X3 -1, data=newData) newerData

R输出:
  X1A X1B X1C X2E X2F X2G X2H X3R X3S X3T X3U
1   1   0   0   0   0   0   0   0   0   0   0
2   0   1   0   1   0   0   0   1   0   0   0
3   0   0   1   0   1   0   0   0   1   0   0
4   0   1   0   0   0   1   0   0   0   1   0
5   0   0   1   0   0   0   1   0   0   0   1
6   1   0   0   0   0   0   0   0   0   0   0

它与1列一起使用,但缺少X2D和X3Q。 有什么想法?
    

@@nongkrong是正确的 - 阅读
?formulas
,您会发现,大多数接受为输入的功能(例如,

formula

r
1个回答
2
投票
等)会自动将分类变量(存储为

glm

S或
factor
S)转换为假人;您可以通过在公式中指定
character
来强制非数字变量。

说,我遇到的情况很方便,无论如何还是手工创建这些指标 - 例如,一个具有种族变量的数据集,其中
,我已经为您注释了代码:
factor
lots在第一行中进行,所以让我们一点一点:
as.factor(var)
检查每个条目的每个条目是否均等;结果将是

flags = data.frame(Reduce(cbind, lapply(levels(d$purpose), function(x){(d$purpose == x)*1}) ))

或<1% of the data fit in one or several of the ethnicity codes. There are other ways to deal with this (simply delete the minority-minority observations, e.g.), but I find that varies by situation.

d$purpose==x

(如果缺少值,则结果)。乘以

d$purpose
x

)迫使输出为整数(因此

TRUE

变成

FALSE
NA
变成
1
)。
*1
将其第二个参数中的函数应用于其第一个参数的每个元素 - 因此,对于每个元素的每个元素(即每个级别的每个级别),我们输出了一个向量
TRUE
S和
1
S的向量,其中
FALSE
S与给定级别匹配的el对应于
0
的元素。 
lapply
的输出为a
levels(d$purpose)
(因此在应用前方),其中一个列表元素对应于每个级别
d$purpose
.

我们想将其放入我们的

0

中,因此A
1
不是很有用。 
1
是我们用来将信息从
d$purpose
表备份到
lapply
表单的内容。 
list
l
-(con)相同,尤其是当我们不知道
d$purpose
的长度时,尤其是。

将其插入
data.frame
将其施加到模式
list
Reduce

还请注意,这样的事情在

list
软件包中可能已经更简单了:
data.frame
    
它是一个不太复杂的解决方案,但仍然是解决方案。只需使用此函数,其中
Reduce(cbind,LIST)
参数是包含分类列的对象。唯一的事情是,如果您拥有一个带有分类和数值列的数据库,则需要创建一个新的子数据库并将函数应用于这样的新子数据库。否则,该函数将“二进制”
每个列,甚至数值。
cbind(LIST[[1]],LIST[[2]],LIST[[3]],...)
    

最新问题
© www.soinside.com 2019 - 2025. All rights reserved.