首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在R中创建一个填充了1和0的表,以显示来自另一个表的值的存在?

如何在R中创建一个填充了1和0的表,以显示来自另一个表的值的存在?
EN

Stack Overflow用户
提问于 2018-07-20 01:36:39
回答 1查看 44关注 0票数 1

我正在处理关于人们和他们被开的药物类别的数据。它看起来像这样(实际数据是通过txt文件读取的):

代码语言:javascript
复制
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来修改它

代码语言:javascript
复制
test$true <- rep(1, nrow(test))

然后使用tidyr

代码语言:javascript
复制
library(tidyr)
test_wide <- spread(test, med, true, fill = 0)

我的原始数据产生了这个错误,但我不确定为什么新数据不能重现它……

代码语言:javascript
复制
Error: `var` must evaluate to a single number or a column name, not a list

请让我知道我能做些什么来使这成为一个更好的可重现的例子,对不起,我真的是个新手。

EN

回答 1

Stack Overflow用户

发布于 2018-07-20 01:54:21

看起来你想在这里做一个热门的编码。关于这一点,请参考"onehot“包。详情请参阅here

参考代码:

代码语言:javascript
复制
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

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51428817

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档