亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

在沒有“timevar”的情況下,將數據從長格式轉到寬格式

在沒有“timevar”的情況下,將數據從長格式轉到寬格式

嚕嚕噠 2019-05-30 12:53:59
在沒有“timevar”的情況下,將數據從長格式轉到寬格式我有一個如下長模式的數據框架:   Name          MedName   Name1    atenolol 25mg   Name1     aspirin 81mg   Name1 sildenafil 100mg   Name2    atenolol 50mg   Name2   enalapril 20mg并且希望得到下面的內容(我不在乎是否可以這種方式命名列,只想要這種格式的數據):   Name   medication1    medication2      medication3   Name1 atenolol 25mg   aspirin 81mg sildenafil 100mg   Name2 atenolol 50mg enalapril 20mg             NA通過這個網站,我已經熟悉了重塑/重塑2包,并經歷了幾次嘗試,試圖讓它發揮作用,但到目前為止已經失敗了。當我嘗試dcast(dataframe, Name ~ MedName, value.var='MedName')我只得到一堆列,它們是藥物名稱的標志(被轉置的值是1或0)示例: Name  atenolol 25mg  aspirin 81mg Name1              1             1Name2              0             0我也試過dcast(dataset, Name ~ variable)但是,在我融化了數據集之后,它只會輸出以下內容(只計算每個人有多少種藥物): Name  MedName Name1        3name2        2最后,我試圖融化數據,然后使用idvar="Name" timevar="variable"(其中所有的都是Medname),但是這似乎不是為我的問題構建的,因為如果idvar有多個匹配項,則RESTPE只會使用第一個MedName,而忽略其余的。有人知道如何使用重塑或其他R函數來完成這個任務嗎?我意識到,可能有一種更混亂的方式來實現這一點,有些循環和條件線基本上可以拆分和重新粘貼數據,但我希望有一個更簡單的解決方案。非常感謝!
查看完整描述

4 回答

?
米脂

TA貢獻1836條經驗 獲得超3個贊

帶著數據表包,這可以很容易地解決與新的rowid職能:


library(data.table)

dcast(setDT(d1), 

      Name ~ rowid(Name, prefix = "medication"), 

      value.var = "MedName")

這意味著:


   Name    medication1     medication2       medication3

1 Name1  atenolol 25mg    aspirin 81mg  sildenafil 100mg

2 Name2  atenolol 50mg  enalapril 20mg              <NA>

另一種方法(通常在1.9.7版本之前使用):


dcast(setDT(d1)[, rn := 1:.N, by = Name], 

      Name ~ paste0("medication",rn), 

      value.var = "MedName")

給出同樣的結果。


類似的方法,但現在使用dplyr和提爾一攬子:


library(dplyr)

library(tidyr)

d1 %>%

  group_by(Name) %>%

  mutate(rn = paste0("medication",row_number())) %>%

  spread(rn, MedName)

這意味著:


Source: local data frame [2 x 4]

Groups: Name [2]


    Name   medication1    medication2      medication3

  (fctr)         (chr)          (chr)            (chr)

1  Name1 atenolol 25mg   aspirin 81mg sildenafil 100mg

2  Name2 atenolol 50mg enalapril 20mg               NA


查看完整回答
反對 回復 2019-05-30
  • 4 回答
  • 0 關注
  • 739 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號