我有下面的数据框
<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
答案 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