如何将一列中的值分组为另一个R中的每个唯一值?
这是一个基本问题,但我一直坚持它很长一段时间。我试图将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)
,但是这种尝试不成功)。
您也可以尝试duplicated
df[!duplicated(df),]
# ColumnA ColumnB
#1 1 f
#2 1 g
#4 2 f
#6 2 h
如果需要,这也会给出行的逻辑索引。
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
随着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
谢谢山姆的回应 - 如果不止一行必须分组,那么是否有一种有效的方法来将每一个分组? – joat1 2015-03-31 13:12:09
您的问题是关于分组变量(列)或子组内的行吗?如果要在子组中选择不同的行或多行,可以编辑上面的最后一行;如果您想按许多列进行分组,并且不想输入它们,则可以将它们作为变量传递:http://stackoverflow.com/questions/21208801/group-by-multiple-columns-in-dplyr-使用字符串向量输入 – 2015-03-31 13:18:45
@jlw没问题。很高兴帮助你 – akrun 2015-03-31 13:17:56