第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

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

在沒有“timevar”的情況下,將數(shù)據(jù)從長格式轉(zhuǎn)到寬格式

在沒有“timevar”的情況下,將數(shù)據(jù)從長格式轉(zhuǎn)到寬格式

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

4 回答

?
米脂

TA貢獻(xiàn)1836條經(jīng)驗 獲得超3個贊

帶著數(shù)據(jù)表包,這可以很容易地解決與新的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")

給出同樣的結(jié)果。


類似的方法,但現(xiàn)在使用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


查看完整回答
反對 回復(fù) 2019-05-30
  • 4 回答
  • 0 關(guān)注
  • 731 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號