R中的pivot_加宽错误:未唯一标识“Data”中的值;输出将包含列表列

R中的pivot_加宽错误:未唯一标识“Data”中的值;输出将包含列表列,r,dplyr,data.table,pivot,tidyr,R,Dplyr,Data.table,Pivot,Tidyr,我尝试了在stackoverflow中看到的不同的事情&不能完全解决这个问题,也不能理解我为什么会有这个问题 我有这样一个数据集: council_name <- c("Barking and Dagenham","Barking and Dagenham","Barking and Dagenham","Barking and Dagenham","Barking and Dagenham","Barking and Dagenham","Barking and Dagenham","B

我尝试了在stackoverflow中看到的不同的事情&不能完全解决这个问题,也不能理解我为什么会有这个问题

我有这样一个数据集:

council_name <- c("Barking and Dagenham","Barking and Dagenham","Barking and Dagenham","Barking and Dagenham","Barking and Dagenham","Barking and Dagenham","Barking and Dagenham","Barking and Dagenham","Barnet","Barnet")
period <- c("1st 2006", "1st 2006", "1st 2006", "1st 2006", "2nd 2006", "2nd 2006", "2nd 2006", "2nd 2006", "1st 2006", "1st 2006") 
category <- c ("glass", "fridges", "paper", "glass", "glass", "fridges", "paper", "glass", "glass", "fridges")
data <- c(333, 222, 100, 98, 450, 540, 33, 450, 560, 120)
category2 <- c ("collected", "collected", "collected", "no donors", "collected", "collected", "collected", "no donors", "collected", "collected")
df <- data.frame (council_name, period, category, category2, data)
council_name <- c("Barking and Dagenham","Barking and Dagenham","Barnet")
period <- c("1st 2006", "2nd 2006", "1st 2006") 
glass <- c(333, 450, 560)
fridges <- c(222,540,120)
paper <- c(100, 33, NA)
no.donors <- c(98, 450, NA)
df.desired <- data.frame (council_name, period, glass, fridges, paper, no.donors)
但我不断发现以下错误:

"Values in `Data` are not uniquely identified; output will contain list-cols.
* Use `values_fn = list(Data = list)` to suppress this warning.
* Use `values_fn = list(Data = length)` to identify where the duplicates arise
* Use `values_fn = list(Data = summary_fun)` to summarise duplicates"
我试着检查那些重复值的位置,但这真的没有意义,因为council_name*period的每个值只有一个category1*category2的值。 我在这里尝试了其他类似的问题,但那里的解决方案并没有解决我的问题

谢谢

1)您不需要
category2

2) 没有关于“否捐赠者”的解释,但根据您的预期输出,似乎任何重复两次的
类别都被赋予了该值

library(dplyr)
df %>%
 select(-category2) %>%
 group_by(council_name, period, category) %>%
 mutate(category = ifelse(row_number() == 1, category, "no.donors")) %>%
 tidyr::pivot_wider(names_from = category,
                    values_from = data)


#  council_name         period   glass fridges paper no.donors
#  <chr>                <chr>    <dbl>   <dbl> <dbl>     <dbl>
#1 Barking and Dagenham 1st 2006   333     222   100        98
#2 Barking and Dagenham 2nd 2006   450     540    33       450
#3 Barnet               1st 2006   560     120    NA        NA
库(dplyr)
df%>%
选择(-category2)%>%
组别(委员会名称、期间、类别)%>%
突变(类别=ifelse(行号()==1,类别,“编号”))%>%
tidyr::pivot\u更宽(名称\u from=类别,
值(从=数据)
#委员会名称时期玻璃冰箱文件编号
#                               
#1 Barking and Dagenham 1st 2006 333 222 100 98
#2 Barking and Dagenham第二届2006 450 540 33 450
#3 Barnet 1st 2006 560 120 NA
1)您不需要
类别2

2) 没有关于“否捐赠者”的解释,但根据您的预期输出,似乎任何重复两次的
类别都被赋予了该值

library(dplyr)
df %>%
 select(-category2) %>%
 group_by(council_name, period, category) %>%
 mutate(category = ifelse(row_number() == 1, category, "no.donors")) %>%
 tidyr::pivot_wider(names_from = category,
                    values_from = data)


#  council_name         period   glass fridges paper no.donors
#  <chr>                <chr>    <dbl>   <dbl> <dbl>     <dbl>
#1 Barking and Dagenham 1st 2006   333     222   100        98
#2 Barking and Dagenham 2nd 2006   450     540    33       450
#3 Barnet               1st 2006   560     120    NA        NA
库(dplyr)
df%>%
选择(-category2)%>%
组别(委员会名称、期间、类别)%>%
突变(类别=ifelse(行号()==1,类别,“编号”))%>%
tidyr::pivot\u更宽(名称\u from=类别,
值(从=数据)
#委员会名称时期玻璃冰箱文件编号
#                               
#1 Barking and Dagenham 1st 2006 333 222 100 98
#2 Barking and Dagenham第二届2006 450 540 33 450
#3 Barnet 1st 2006 560 120 NA

谢谢!但我得到:“错误:列
类别
无法修改,因为它是一个分组变量”@AntVal奇怪,但它对我来说很好。无论如何,在这种情况下,您可以使用
df%%>%groupby(委员会名称、期间、类别)%%>%mutate(category2=ifelse(row\u number()==1,category,“no.providers”)%%>%ungroup()%%>%select(-category)%%>%tidyr::pivot\u更宽(names\u-from=category2,values\u-from=data)
谢谢!但我得到:“错误:列
类别
无法修改,因为它是一个分组变量”@AntVal奇怪,但它对我来说很好。无论如何,在这种情况下,您可以使用
df%%>%groupby(委员会名称、期间、类别)%%>%mutate(category2=ifelse(row\u number()==1,category,“no.providers”)%%>%ungroup()%%>%select(-category)%%>%tidyr::pivot\u-wide(names\u-from=category2,values\u-from=data)