我有一个看起来像这样的数据框
uid language_name
1 333 English
2 333 French
3 333 Dutch
4 654 Spanish
5 546 English
6 546 French
7 432 Afrikaans
8 302 German
9 302 Dutch
我希望它看起来像这样:
uid English French Dutch ..........
1 333 1 1 1
2 654 0 0 0
3 546 1 1 0
4 432 0 0 0
5 302 0 0 1
所以我想将language_name列更改为不同的虚拟列,并将语言作为其名称。有没有快速简便的方法呢?
答案 0 :(得分:1)
尝试使用reshape2
。像这里:
library("reshape2")
dcast(cbind(z, ile=1),
uid~language_name, value.var="ile", fill=0) -> t
colnames(t)[-1] <- paste("Language_", colnames(t)[-1], sep="")
答案 1 :(得分:0)
这种虚拟编码通常更好的方法是使用稀疏矩阵和Matrix::sparse.model.matrix
:
Matrix::sparse.model.matrix(uid ~ -1 + ., data=your_data_frame)