2010-05-03 28 views
12

擺脫行我有一個大的數據幀與如列:獲得具有重複屬性中的R

ID, time, OS, IP 

該數據幀的每一行對應一個條目。在某個ID的數據框中存在幾個條目(行)。我想擺脫這些多行(顯然其他屬性將不同的相同的ID)。或者放在不同的位置:我只希望每個ID都有一個單獨的條目(行)。

當我在ID列上使用unique時,我只收到關卡(或每個唯一ID),但我還想保留其他屬性。 我試圖使用apply(x,2,unique(data$ID)),但這也不起作用。

+1

你必須定義你想與其他屬性做具有相同ID的觀察是什麼當時不同意。 – Aniko 2010-05-03 16:07:36

+0

好吧,我想看到用戶的操作系統分佈... 因此,當我有每個用戶只有一個條目的數據框,Id做:mytable < - 表(數據集$ os.name),並做一些事後繪製... – CatholicEvangelist 2010-05-03 16:11:39

回答

26
subset(data,!duplicated(data$ID)) 

應該做的伎倆

+0

非常感謝 - 我即將絕望...... – CatholicEvangelist 2010-05-03 16:21:25

+0

這將工作,如果你沒有任何啓發式的想法如何選擇其他數據。似乎對我來說是一個非常奇怪的用例... – Shane 2010-05-03 16:27:10

+1

正是我所需要的詹姆斯,謝謝。 – 2010-06-13 15:16:06

3

如果你想保持每一行對應一個ID,但在各行不同的數據,那麼你需要一些邏輯決定放棄其他行。例如:

df <- data.frame(ID=c(1, 2, 2, 3), time=1:4, OS="Linux") 
df 
    ID time OS 
1 1 1 Linux 
2 2 2 Linux 
3 2 3 Linux 
4 3 4 Linux 

現在,我將保留最大時間值和最後OS值:

library(plyr) 
unique(ddply(df, .(ID), function(x) data.frame(ID=x[,"ID"], time=max(x$time), OS=tail(x$OS,1)))) 
    ID time OS 
1 1 1 Linux 
2 2 3 Linux 
4 3 4 Linux 
+0

非常感謝您的詳細解答! – CatholicEvangelist 2010-05-03 16:21:50