簡體   English   中英

如何在R中創建一個填充了1和0的表,以顯示來自另一個表的值的存在?

[英]How to create a table in R populated with 1s and 0s to show presence of values from another table?

我正在處理有關人員以及他們開什么葯的數據。 看起來像這樣(實際數據通過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萬行,4.5萬名獨特患者和49種獨特葯物。 有些患者有多種相同的葯物,我將其刪除。 並非所有患者都有每種葯物。 我想將49種獨特的葯物中的每一種划分為單獨的列,並讓每個獨特的患者排成一行,並在表格中填充1和0,以顯示患者是否有葯物。

我試圖使用傳播或dcast,但沒有值列。 我試圖通過添加1來修正此問題

test$true <- rep(1, nrow(test))

然后用提迪爾

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

請讓我知道我可以做些什么來使它成為更好的可重現示例,對不起,我真的是新來的。

使用dplyr另一種解決方案

library(dplyr)
test %>% group_by(id) %>% table()

看來您正在嘗試在此處進行onehot編碼。 為此,請參考“ onehot”軟件包。 詳細信息在這里

參考代碼:

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

確保要編碼的所有列均為type factor 另外,我也自由地將data.table更改為data.frame

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM