我有一个数据帧,返回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
")
Run Code Online (Sandbox Code Playgroud)
我尝试下面的代码
final= df %>%
group_by(xxx,yyyy) %>%
summarise(Topcomp=Company[c(which(min(cnt)==cnt))])
Run Code Online (Sandbox Code Playgroud)
我越来越:
错误:期望单个值
我想要输出如下.
xxx yyyy Topcomp
<int> <int> <fctr>
1 1 1 aaa,bbb
2 2 0 ddd
Run Code Online (Sandbox Code Playgroud)
你应该做这个:
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
Run Code Online (Sandbox Code Playgroud)
您收到错误是因为which返回了两个值,因此当您需要单个Company值时,您的子集具有两个值summarise.与之toString类似的是,它将两个值折叠为由逗号分隔的字符串.pastecollapse=","
另外,正如alistaire在他对另一个答案的评论中指出的那样,你不需要c和which,所以这可以简化为:
final= df %>%
group_by(xxx,yyyy) %>%
summarise(Topcomp=toString(Company[min(cnt)==cnt]))
Run Code Online (Sandbox Code Playgroud)
你可以用 paste(..., collapse = ",")
df %>%
group_by(xxx,yyyy) %>%
summarise(Topcomp = paste(Company[min(cnt) == cnt], collapse = ","))
Run Code Online (Sandbox Code Playgroud)