如何为另一个R中的每个唯一值对一列中的值进行分组?

时间:2015-03-31 12:48:52

标签: r aggregate

这是一个基本问题,但我已经坚持了很长一段时间。我正在尝试对ColumnB中的值进行分组,但只在ColumnA中的每个值中进行分组。

初始数据框将类似于:

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 个答案:

答案 0 :(得分:8)

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

答案 1 :(得分:3)

您还可以尝试duplicated

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

如果需要,这也会给出行的逻辑索引。

答案 2 :(得分: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