【发布时间】:2017-02-08 15:40:21
【问题描述】:
目前,我有一个投票数据数据集,其中每个人对多项政策进行了投票,无论是赞成还是反对,或者在对该特定政策进行投票时他们都缺席。
总的来说,我有 23 个策略,但我不知道如何将数据转换为二进制。 数据集的设置方式显然是 "n" = no , "y" = yes 和 "a" =缺席
如果有人可以在这里帮助我了解如何将 R 中的数据转换为二进制矩阵,我将不胜感激!
【问题讨论】:
目前,我有一个投票数据数据集,其中每个人对多项政策进行了投票,无论是赞成还是反对,或者在对该特定政策进行投票时他们都缺席。
总的来说,我有 23 个策略,但我不知道如何将数据转换为二进制。 数据集的设置方式显然是 "n" = no , "y" = yes 和 "a" =缺席
如果有人可以在这里帮助我了解如何将 R 中的数据转换为二进制矩阵,我将不胜感激!
【问题讨论】:
这可以使用model.matrix 来完成。请注意,这在 R 中的许多情况下会自动为您完成,例如回归分析。
> set.seed(1)
> (df <- data.frame(id=1:10,vote=sample(c("yes","no","absent"),10,replace=TRUE)))
id vote
1 1 yes
2 2 no
3 3 no
4 4 absent
5 5 yes
6 6 absent
7 7 absent
8 8 no
9 9 no
10 10 yes
> model.matrix(~.-1,df)
id voteabsent voteno voteyes
1 1 0 0 1
2 2 0 1 0
3 3 0 1 0
4 4 1 0 0
5 5 0 0 1
6 6 1 0 0
7 7 1 0 0
8 8 0 1 0
9 9 0 1 0
10 10 0 0 1
【讨论】:
例如:
m <- as.matrix(cbind(c('y','y','y'),c('n','n','n'),c('a','a','a')))
m[m == 'y'] <- 1
m[m == 'n'] <- 0
m[m == 'a'] <- NA
【讨论】:
TRUE 和FALSE。当然,使用您的方法,矩阵仍然是字符矩阵。
m[m == 'a'] <- NA; m[] <- m == 'y'; storage.mode(m) <- "logical"