我有一個非常大的資料集,我需要根據其他列的文本字串為其創建新的列,并將其放入二進制格式。 我有一個人的 ID 列和一組 99 個 "診斷代碼",其中包含一個與特定健康狀況相對應的文本字串。
原始資料的樣本
我需要把資料變成這種格式....
| PersonID | N18.3 | V34.2 | E73 | F35.9 | G27.2(加上所有其他代碼) | 。
|---|---|---|---|---|---|
| 10 | 1 | 1 |
我已經嘗試了移位、制表,以及其他許多不同的方法,但似乎都沒有效果。 我希望得到任何幫助!
uj5u.com熱心網友回復:
一個使用melt和dcast的data.table選項
library(data.table)
dcast(melt(setDT(df),id。 vars = 'PersonID')。 PersonID ~ value, fun. aggregate = length)。
# PersonID D4.0 E73 F35.9 G27.2 J05.1 J60 N18.3 V34.2 X29
#1: 10 0 1 0 0 0 0 1 1 0
#2: 11 1 0 1 0 0 0 0 0 1
#3: 12 0 0 0 1 1 0 0 0
uj5u.com熱心網友回復:
我們可以用pivot_longer重塑為 "長 "格式,然后用pivot_wider重塑回 "寬 "格式,同時指定values_fn為length和values_fill設定為0
library(dplyr)
library(tidyr)
df1 %> %
pivot_longer(cols = -PersonID) %> %
select(-name) %>%
pivot_wider(names_from= value, values_from = value,
values_fn= length。 values_fill = 0)
輸出
# A tibble: 3 x 10
PersonID N18.3 V34.2 E73 F35.9 X29 D4.0 G27.2 J05.1 J60
<int> <int> < int> <int> > <int> <int> < <。 int> <int> > <int>
1 10 1 1 1 0 0 0 0 0 0
2 11 0 0 0 1 1 1 0 0 0
3 12 0 0 0 0 0 0 1 1 1
或者使用recast從reshape2
library(reshape2)
recast(df1, id. var = 'PersonID'。 PersonID ~ value, length)
PersonID D4.0 E73 F35.9 G27.2 J05.1 J60 N18.3 V34.2 X29
1 10 0 1 0 0 0 0 1 1 0
2 11 1 0 1 0 0 0 0 0 1
3 12 0 0 0 1 1 1 0 0 0
或者使用base R與table后,unlist除第一列外的其他列
table(rep(df1[[1]]/span>。 ncol(df1)-1) 。 unlist(df1[/span>-1]))
D4.0 E73 F35.9 G27.2 J05.1 J60 N18.3 V34.2 X29
10 0 1 0 0 0 0 1 1 0
11 1 0 1 0 0 0 0 0 1
12 0 0 0 1 1 1 0 0 0
data
df1 < -結構(list(PersonID = 10。 12, DiagnosisCode1 = c(/span>"N18. 3",
"F35.9", "G27。 2")。 DiagnosisCode2 = c("V34. 2", "X29", "J05.1"
)。 DiagnosisCode3 = c("E73"/span>。 "D4. 0", "J60")),
class = "data.frame", 行。 names = c(NA,)
-3L))
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/334057.html
標籤:
上一篇:如何才能"墊"出名字
