我有一个数据帧,它以相同的分钟返回2组。如何处理达到我预期的输出?
df<- read.table(header=TRUE,
text="
Company xxx yyyy zzzz cnt
abc 1 1 1 20
aaa 1 1 2 3
bbb 1 1 1 3
ddd 2 0 2 100
")
我试过下面的代码
final= df %>%
group_by(xxx,yyyy) %>%
summarise(Topcomp=Company[c(which(min(cnt)==cnt))])
我得到了:
错误:期待单个值
我希望输出如下。
xxx yyyy Topcomp
<int> <int> <fctr>
1 1 1 aaa,bbb
2 2 0 ddd
答案 0 :(得分:6)
你应该这样做:
final= df %>%
group_by(xxx,yyyy) %>%
summarise(Topcomp=toString(Company[c(which(min(cnt)==cnt))]))
##Source: local data frame [2 x 3]
##Groups: xxx [?]
##
## xxx yyyy Topcomp
## <int> <int> <chr>
##1 1 1 aaa, bbb
##2 2 0 ddd
您收到错误是因为which
返回了两个值,因此当Company
需要单个值时,summarise
的子集有两个值。 toString
类似于paste
collapse=","
,因为它将两个值折叠为以逗号分隔的字符串。
另外,正如alistaire在其他答案的评论中指出的那样,你不需要c
和which
,所以这可以简化为:
final= df %>%
group_by(xxx,yyyy) %>%
summarise(Topcomp=toString(Company[min(cnt)==cnt]))
答案 1 :(得分:5)
您可以使用paste(..., collapse = ",")
df %>%
group_by(xxx,yyyy) %>%
summarise(Topcomp = paste(Company[min(cnt) == cnt], collapse = ","))