r - 带有代表其他向量的独特组合的字母的新向量

标签 r aggregate

我有

dat <-data.frame(study=letters[c(1,1,1,4,4,4,4,10,10)],n1i=c(25,25,22,38,50,30,30,50,50)) 

我想要
     study n1i grp
1     a  25   A
2     a  25   A
3     a  22   B
4     d  38   A
5     d  50   B
6     d  30   C
7     d  30   C
8     j  50   A
9     j  50   A

但是这个...
dat$grp<-  
  as.vector(unlist(aggregate(dat$n1i,
   list(dat$study), function(x) LETTERS[1:length(x)])$x)) 

...给我
> dat
  study n1i grp
1     a  25   A
2     a  25   B
3     a  22   C
4     d  38   A
5     d  50   B
6     d  30   C
7     d  30   D
8     j  50   A
9     j  50   B

换句话说,我希望“grp”字母从 1 到最后一个唯一的 study*n1i 组合。

最佳答案

dat <-data.frame(study=letters[c(1,1,1,4,4,4,4,10,10)],n1i=c(25,25,22,38,50,30,30,50,50)) 

library(dplyr)

dat %>%
  group_by(study) %>%                    # for each study
  mutate(id = row_number()) %>%          # get the number of row as an id
  group_by(study, n1i) %>%               # for each study and n1i combination
  transmute(grp = LETTERS[min(id)]) %>%  # add the letters based on the minimum id value of that combination, while removing the id column
  ungroup()                              # forget the grouping

# # A tibble: 9 x 3
#   study   n1i grp  
#   <fct> <dbl> <chr>
# 1 a        25 A    
# 2 a        25 A    
# 3 a        22 C    
# 4 d        38 A    
# 5 d        50 B    
# 6 d        30 C    
# 7 d        30 C    
# 8 j        50 A    
# 9 j        50 A 

这种方法假设重复的行一个接一个。

关于r - 带有代表其他向量的独特组合的字母的新向量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50761132/

相关文章:

r - 如何在r中选择最佳神经网络重复数

mysql - 如何在 MySQL 中为每个类别选择 3 行?

caching - 我可以在 JMeter 聚合报告中包含带有缓存响应的请求吗

用于查找最新数据的 mongodb 聚合

mysql - 如何在 Django ORM 中使用 GROUP BY

R函数按字符串长度然后按字母对列进行排序?

R,作为矩阵数据导入,计算行总和但不包括标题

r - 提取空格之间的字符串

c++ - 计算 LogicalMatrix R/C++/Rcpp 的全真行的最快方法

python - Pandas :基于另一列的过滤器进行聚合