2015-11-04 58 views
1

我有一個「長」格式的數據表,其中包含每個唯一ID的許多條目。例如...通過多變量在數據幀上使用表

id <- c(1,1,1,2,2,2) 
date <- c("A","A","B","C","C","C") 
loc <- c("X", "X", "X", "X","Y","Z") 
dfTest <- data.frame(id,date,loc) 

它創建一個示例表。

id date loc 
1 1 A X 
2 1 A X 
3 1 B X 
4 2 C X 
5 2 C Y 
6 2 C Z 

我的目標是創建一個如下所示的表格。

id X Y Z 
1 2 0 0 
2 1 1 1 

我想看看一個位置被多少次訪問唯一。 ID#1在第A天和第B天訪問了X,總共訪問次數爲2次。我使用重塑技術接近了這一點,並試圖將其變成「寬」格式。但是,我不知道如何考慮第二個變量(日期)。我試圖在唯一日期提取每個地點的訪問次數。實際日期本身無關緊要,只是它確定了重複的條目。

我現在的解決方案在R中是不好的形式(要使用迭代循環來查看每個唯一日期內發現的位置)。我希望重塑,應用,聚合,或者也許另一個包可能有更多的幫助。我已經瀏覽了一堆其他重塑指南,但我仍然有點卡在聰明的方式來做到這一點。

+0

你只是在尋找'表(唯一的(dfTest)[ - 2])'也許? – A5C1D2H2I1M1N2O1R2T1

+0

這很完美 - 我是R的新手,並且認爲我正在努力工作。謝謝。 – asshah4

回答

5

通過它的聲音,你應該能夠做你需要什麼:

table(unique(dfTest)[-2]) 
## loc 
## id X Y Z 
## 1 2 0 0 
## 2 1 1 1 
+0

這就像一個魅力,謝謝你。 – asshah4

1

我們可以用'loc','id',uniqueunique,unique元素的'date',並使用dcast來獲得預期的輸出。

library(data.table)#v1.9.6+ 
dcast(setDT(dfTest)[, uniqueN(date), .(loc, id)], id~loc, value.var='V1', fill=0) 
# id X Y Z 
#1: 1 2 0 0 
#2: 2 1 1 1 
+0

我也會試一試 - 我正在處理的文件大約有300k條目,所以這個速度可能會更快。 – asshah4

+0

@ asshah4 data.table中的'dcast'非常快。 – akrun