2016-04-08 36 views
-3

Aşağıda gösterildiği gibi uzun bir biçimdeki veri kümesini ele alıyorum.r dönüştürme veri kümesinden uzun ile geniş arası

id  Name     FluidTotal 
    60718 Rocuronium   11.069175 
    07860 Rocuronium   5.967500 
    90389 Rocuronium   200.000000 
    01536 Rocuronium   78.311333 
    01536 Rocuronium   51.415600 
    28047 Rocuronium   72.944444 
    28047 Acid     1 
    28047 Acid     1 
    28047 Acid     1 
    28047 Acid     1 
    92323 Acid     1 
    92323 Void     100 
    01536 Void     25 
    60718 Void     70 
    60718 Void     40 

Ne yapmaya çalışıyorum

Id  Rocuronium Acid Void 
    60718 11.069175 -  110 
    07860 5.967500  -  -           
    90389 200.000000 -  - 
    01536 129.72693 -  25 
    28047 72.944444 4  - 
    92323 -   1  100 

ilk satır 60718 11.069175 - 110, Void için hücre değeri 110 olduğunu Aşağıda bu gibi geniş bir biçime bu dönüşümü olan kimliği için son iki satır çünkü Uzun formatta, 70 ve 40 şeklindedir, böylece geniş biçime dönüştürüldüklerinde bu iki değer eklenir.

Benzer geniş formatta id 01536 için Rocuronium değeri 129.72693 bu kimliği 01536 için uzun formatta satırlar 4 ve 5 çünkü 78.311333 ve ben bu dönüşümü gerçekleştirerek herhangi bir yardım takdir ediyorum

51.415600, sayesinde peşin ..

+1

burada aynı - http://stackoverflow.com/questions/35424064/converting-long-to-wide-format/35424289 'yeniden şekillendirmek (aggregate (FluidTotal ~., data = dat, FUN = toplam), idvar = "id", timevar = "Name", direction = "geniş") – thelatemail

+0

Veya 'tidyr' paketinin' spread' işlevini kullanabilirsiniz. – Gopala

+0

'yeniden şekillendirmek (aggregate (....)), yeni bir R kullanıcısı için bir kerelik başarı ve daha sonra başarısızlık için bir reçete gibi görünüyor. En deneyimli R kullanıcıları hala 'yeniden şekillendirmek' ile sorun yaşıyor. –

cevap

5

baz fonksiyonu tapply işlevi sağlayan çapraz sınıflandırılmış kategoriler içinde işlemlerini yapın:

with(dat, tapply(FluidTotal, list(id,Name), sum)) 

     Acid Rocuronium Void 
1536 NA 129.72693 25 
7860 NA 5.96750 NA 
28047 4 72.94444 NA 
60718 NA 11.06917 110 
90389 NA 200.00000 NA 
92323 1   NA 100 

Dönüşümleri açıklarken, bireysel satırları daraltma eylemi, uzuntan genişliğe gitmekten farklıdır. Bu durumun bir R-matrix nesnesini geri çektiği ve bir veri çerçeve biçiminde olması gerekiyorsa, bunu zorlamak için data.frame'u kullanabileceğinizi unutmayın.

+0

Gördün mü bilmiyordun. Kabul etmeden sessizce silmek istemedim. Konuyla ilgili olmadığı için sileceğim. Teşekkür ederim. – Gopala

+0

@ 42-, latemail ve Gopala, bu çok temiz. Diğer çözümleri de test edeceğim –

2

xtabs (başka bir base R işlevi) kullanabiliriz. Varsayılan olarak, xtabs, sum'u toplar. Sadece yerine `` yerine sum` ile min` - - Esasen

xtabs(FluidTotal~., df1) 
#   Name 
#id   Acid Rocuronium  Void 
# 1536 0.00000 129.72693 25.00000 
# 7860 0.00000 5.96750 0.00000 
# 28047 4.00000 72.94444 0.00000 
# 60718 0.00000 11.06917 110.00000 
# 90389 0.00000 200.00000 0.00000 
# 92323 1.00000 0.00000 100.00000 
+0

Varsayılan olarak? Bu gerçekten xtabs için tek seçenek. Bu gerçekten 'else (NCOL (y) == 1L) { (y, toplam, toplam)} ' –

+0

Evet, bu tek seçenek, – akrun