dplyr:如何处理多个值
dplyr: How to handle multiple value
我有一个数据框,return 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))])
我得到:
Error: expecting a single value
我想要如下所示的输出。
xxx yyyy Topcomp
<int> <int> <fctr>
1 1 1 aaa,bbb
2 2 0 ddd
你可以使用 paste(..., collapse = ",")
df %>%
group_by(xxx,yyyy) %>%
summarise(Topcomp = paste(Company[min(cnt) == cnt], collapse = ","))
你应该这样做:
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
返回了两个值,因此当 summarise
需要一个值时,您的 Company
的子集有两个值。 toString
与 paste
和 collapse=","
的相似之处在于它将两个值折叠成一个由逗号分隔的字符串。
此外,正如 alistaire 在他对其他答案的评论中指出的那样,您不需要 c
和 which
,因此可以简化为:
final= df %>%
group_by(xxx,yyyy) %>%
summarise(Topcomp=toString(Company[min(cnt)==cnt]))
我有一个数据框,return 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))])
我得到:
Error: expecting a single value
我想要如下所示的输出。
xxx yyyy Topcomp
<int> <int> <fctr>
1 1 1 aaa,bbb
2 2 0 ddd
你可以使用 paste(..., collapse = ",")
df %>%
group_by(xxx,yyyy) %>%
summarise(Topcomp = paste(Company[min(cnt) == cnt], collapse = ","))
你应该这样做:
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
返回了两个值,因此当 summarise
需要一个值时,您的 Company
的子集有两个值。 toString
与 paste
和 collapse=","
的相似之处在于它将两个值折叠成一个由逗号分隔的字符串。
此外,正如 alistaire 在他对其他答案的评论中指出的那样,您不需要 c
和 which
,因此可以简化为:
final= df %>%
group_by(xxx,yyyy) %>%
summarise(Topcomp=toString(Company[min(cnt)==cnt]))