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
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]],...)