2015-12-22 21 views
6

Aşağıdaki veri kümesini:kolay yolu

sample.data <- data.frame(Step = c(1,2,3,4,1,2,1,2,3,1,1), 
          Case = c(1,1,1,1,2,2,3,3,3,4,5), 
          Decision = c("Referred","Referred","Referred","Approved","Referred","Declined","Referred","Referred","Declined","Approved","Declined")) 

sample.data 

    Step Case Decision 
1  1 1 Referred 
2  2 1 Referred 
3  3 1 Referred 
4  4 1 Approved 
5  1 2 Referred 
6  2 2 Declined 
7  1 3 Referred 
8  2 3 Referred 
9  3 3 Declined 
10 1 4 Approved 
11 1 5 Declined 

başlığındaki kararlarla, geniş tablo formatında çevirebilmektedirler R mümkün mü ve Örneğin oluşum sayısı, varlık her hücrenin değeri:

Case Referred Approved Declined 
1   3   1   0 
2   1   0   1 
3   2   0   1 
4   0   1   0 
5   0   0   1 
+2

agregasyon parametresini kullanabilirsiniz. Yani sizin durumunuzda bu olurdu: 'dcast (sample.data, Case ~ Decision)' – Jaap

+0

Teşekkürler @Jaap. Dcast fonksiyonunu daha fazla kontrol edip kullanımlarını öğreneceğim. Her ne kadar 'uzunluk' (= sayım) bir dakikalığına bana sahip olsa da. – dGecko

cevap

9

basit table() deyimi ile gerçekleştirebilirsiniz. Yanıtlarınızı istediğiniz gibi almak için ayar faktörü seviyeleri ile oynayabilirsiniz.

sample.data$Decision <- factor(x = sample.data$Decision, 
           levels = c("Referred","Approved","Declined")) 

table(Case = sample.data$Case,sample.data$Decision) 

Case Referred Approved Declined 
    1  3  1  0 
    2  1  0  1 
    3  2  0  1 
    4  0  1  0 
    5  0  0  1 
+0

Eğer sample.data' 2 faktör değişkenine sahipse bu nasıl çalışır. 'tablo (Case = sample.data $ Case, sample.data $ Karar, sample.data $ Reason)' kafa karıştırıcı bir sonuç verir. – dGecko

+0

Bu teknik olarak ayrı bir soru olsa da, temel olarak, tabloyu bir veri çerçevesine zorlamak için 'as.data.frame' işlevini kullanın. – TARehman

+0

Özür dilerim. Bunun için yeni bir soru yapacak. – dGecko

13

length için reshape2 -package varsayılan dcast fonksiyonu kümelenme parametresi (= sayım). data.table -paketinde, dcast işlevinin geliştirilmiş bir sürümü uygulanır.

library('reshape2') # or library('data.table') 
newdf <- dcast(sample.data, Case ~ Decision) 

veya açıkça parametreleri kullanarak ile: Yani sizin durumunuzda bu olurdu

> newdf 
    Case Approved Declined Referred 
1 1  1  0  3 
2 2  0  1  1 
3 3  0  1  2 
4 4  1  0  0 
5 5  0  1  0 
İşte

If you don't specify an aggregation function, you get a warning telling you that dcast is using lenght as a default.

4

bir var:

newdf <- dcast(sample.data, Case ~ Decision, 
       value.var = "Decision", fun.aggregate = length) 

Bu aşağıdaki dataframe verir dplyr + tidyr yaklaşım:

if (!require("pacman")) install.packages("pacman") 
pacman::p_load(dplyr, tidyr) 

sample.data %>% 
    count(Case, Decision) %>% 
    spread(Decision, n, fill = 0) 

## Case Approved Declined Referred 
## (dbl) (dbl) (dbl) (dbl) 
## 1  1  1  0  3 
## 2  2  0  1  1 
## 3  3  0  1  2 
## 4  4  1  0  0 
## 5  5  0  1  0 
3

Biz lenght` (= sayısı) `e` reshape2` paket varsayılan `dcast` işlevinde base Rxtabs

xtabs(Step~Case+Decision, transform(sample.data, Step=1)) 
#  Decision 
# Case Approved Declined Referred 
# 1  1  0  3 
# 2  0  1  1 
# 3  0  1  2 
# 4  1  0  0 
# 5  0  1  0