这是一个基本问题,但我已经坚持了很长一段时间。我正在尝试对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)
,但该尝试未成功。)
答案 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