根据数据框中另一列的值汇总和计算列的唯一值

时间:2021-01-10 14:10:23

标签: r

我有下面的数据框

<ngb-accordion [closeOthers]="true">
  <ng-container *ngFor="let result of results; let i= index">
    <ngb-panel id="ngb-panel-{{i}}" title="{{result}}">
      <ng-template ngbPanelContent>
        <div>
          hello content{{i}}
        </div>
      </ng-template>
    </ngb-panel>
  </ng-container>
</ngb-accordion>

并且我想将它转换为一个数据框,其中唯一的 name<-c("Jack","Bob","Jack","Bill","Jack","Bob") items<-c("car","house","ball","desk","bike","chair") d<-data.frame(name,item) name items 1 Jack car 2 Bob house 3 Jack ball 4 Bill desk 5 Jack bike 6 Bob chair 将根据 items 进行汇总,并且将添加一个带有它们的计数的新列,所以它会像:< /p>

name

3 个答案:

答案 0 :(得分:2)

虽然我不相信逗号分隔的序列是进行进一步数据处理的最佳方式,但这里的代码可以满足您的需求:

library(dplyr)

d %>%
  group_by(name) %>% 
  summarize(count = n(),
            items = toString(items)) %>%
  ungroup()

# A tibble: 3 x 3
  name  count items          
  <chr> <int> <chr>          
1 Bill      1 desk           
2 Bob       2 house, chair   
3 Jack      3 car, ball, bike

答案 1 :(得分:1)

没有额外包的基本 R 解决方案

d <-data.frame(name  = c("Jack","Bob","Jack","Bill","Jack","Bob"),
               items = c("car","house","ball","desk","bike","chair"))

获取 names 的频率并为连接的 items 添加另一列。

result <- margin.table(table(d), 1)
sdf <- data.frame(items = paste(d$items[d$name == names(result)], collapse = ", "), result)

重新排列列

sdf <- sdf[, c(2, 1, 3)]
sdf
#>   name             items Freq
#> 1 Bill house, ball, desk    1
#> 2  Bob house, ball, desk    2
#> 3 Jack house, ball, desk    3

reprex package (v0.3.0) 于 2021 年 1 月 10 日创建

答案 2 :(得分:1)

d %>% group_by(name) %>% 
  mutate(foo = paste0(items, collapse = ",")) %>% 
  mutate(count_w = length(foo)) %>% 
  dplyr::select(-items) %>% 
  distinct()

# A tibble: 3 x 3
# Groups:   name [3]
  name foo   count_w
  <chr> <chr>          <int>
1 Jack  car,ball,bike      3
2 Bob   house,chair        2
3 Bill  desk               1