2015-03-31 85 views
3

這是一個基本問題,但我一直堅持它很長一段時間。我試圖將ColumnB中的值分組,但只能在ColumnA中的每個值中分組。如何將一列中的值分組爲另一個R中的每個唯一值?

初始數據幀將是這樣的:

ColumnA = c(1,1,1,2,2,2) 
ColumnB = c("f","g","g","f","f","h") 
df <- data.frame(ColumnA,ColumnB) 
ColumnA ColumnB 
    1   f 
    1   g 
    1   g 
    2   f 
    2   f 
    2   h 

其結果將是:

ColumnA ColumnB 
    1   f 
    1   g 
    2   f 
    2   h 

(其中一種方法我嘗試使用與dplyr使用:group_by(df, ColumnB),但是這種嘗試不成功)。

回答

3

您也可以嘗試duplicated

df[!duplicated(df),] 
# ColumnA ColumnB 
#1  1  f 
#2  1  g 
#4  2  f 
#6  2  h 

如果需要,這也會給出行的邏輯索引。

+0

@jlw沒問題。很高興幫助你 – akrun 2015-03-31 13:17:56

8

The unique功能特別適合(沒有雙關語意)來解決問題:

df <- data.frame(v1=c(1,1,1,2,2,2), v2=c("f", "g", "g", "f", "f", "h")) 
df <- unique(df) 

> df1 
    v1 v2 
1 1 f 
2 1 g 
4 2 f 
6 2 h 
2

隨着dplyr,你會想要將它們分組後進行的操作;單獨的分組不會摺疊行。你可以計算出一些與summarise(),基於變量等集團內挑一排下面是與slice()一個例子來選擇各個組組合中的第一條記錄:

library(dplyr) 
df %>% 
    group_by(ColumnA, ColumnB) %>% 
    slice(1) # select the first row within each group combination 

Source: local data frame [4 x 2] 
Groups: ColumnA, ColumnB 

    ColumnA ColumnB 
1  1  f 
2  1  g 
3  2  f 
4  2  h 
+0

謝謝山姆的迴應 - 如果不止一行必須分組,那麼是否有一種有效的方法來將每一個分組? – joat1 2015-03-31 13:12:09

+0

您的問題是關於分組變量(列)或子組內的行嗎?如果要在子組中選擇不同的行或多行,可以編輯上面的最後一行;如果您想按許多列進行分組,並且不想輸入它們,則可以將它們作爲變量傳遞:http://stackoverflow.com/questions/21208801/group-by-multiple-columns-in-dplyr-使用字符串向量輸入 – 2015-03-31 13:18:45

相關問題