我正在处理关于人们和他们被开的药物类别的数据。它看起来像这样(实际数据是通过txt文件读取的):
test <- matrix(c(1,"a",1,"a",1,"b",2,"a",2,"c"),ncol=2,byrow=TRUE)
colnames(test) <- c("id","med")
test <- as.data.table(test)
test <- unique(test[, 1:2])
test该表有大约500万行,45k个独特的患者和49个独特的药物。有些病人有多个相同的药物,我把它们去掉。并不是所有的病人都有每种药。我希望将49种独特的药物分别放在单独的列中,让每个独特的患者成为一行,并用1和0填充表格,以显示患者是否有这种药物。
我尝试使用扩展或dcast,但没有值列。我尝试通过添加一行1来修改它
test$true <- rep(1, nrow(test))然后使用tidyr
library(tidyr)
test_wide <- spread(test, med, true, fill = 0)我的原始数据产生了这个错误,但我不确定为什么新数据不能重现它……
Error: `var` must evaluate to a single number or a column name, not a list请让我知道我能做些什么来使这成为一个更好的可重现的例子,对不起,我真的是个新手。
发布于 2018-07-20 01:54:21
看起来你想在这里做一个热门的编码。关于这一点,请参考"onehot“包。详情请参阅here。
参考代码:
library(onehot)
test <- matrix(c(1,"a",1,"a",1,"b",2,"a",2,"c"),ncol=2,byrow=TRUE)
colnames(test) <- c("id","med")
test <- as.data.frame(test)
str(test)
test$id <- as.numeric(test$id)
str(test)
encoder <- onehot(test)
finaldata <- predict(encoder,test)
finaldata确保要编码的所有列都是factor类型。此外,我还冒失地将data.table更改为data.frame。
https://stackoverflow.com/questions/51428817
复制相似问题