为什么我使用 tidyr 的传播函数得到 "repeat" 行的 NA?

Why am I getting "repeat" rows with NAs using tidyr's spread function?

我正在尝试从具有以下结构的数据框开始:

Date    State    Price.Name    Cost.Name   Price    Cost
Jan       AZ    firm1.price   firm1.cost    100       50
Jan       AZ    firm2.price   firm2.cost    200      100

到一个看起来像这样的数据框:

Date    State    firm1.price    firm2.price    firm1.cost    firm2.cost
Jan        AZ            100            200            50          100

我试过使用 tidyr 的传播:

data=spread(data,Price.Name, Price)
data=spread(data,Cost.Name, Cost)

但这给了我以下数据框:

Date    State    firm1.price    firm2.price    firm1.cost    firm2.cost
Jan        AZ            100            NA            50            NA
Jan        AZ             NA           200            NA           100

我在这里找到了另一个解决相同问题的线程:tidyr spread function generates sparse matrix when compact vector expected,但我无法确定是否找到了解决方案。有人建议在使用 spread 之前按虚拟变量分组,但我已经尝试过但无济于事。

您可以分别执行价格和成本,然后合并(加入)它们(或 cbind 它们,具体取决于您的数据的具体情况):

x <- read.table(text = "Date    State    Price.Name    Cost.Name   Price    Cost
+ Jan       AZ    firm1.price   firm1.cost    100       50
+                 Jan       AZ    firm2.price   firm2.cost    200      100",header = TRUE,sep = "")
> x %>% select(-Cost,-Cost.Name) %>% spread(Price.Name,Price)
  Date State firm1.price firm2.price
1  Jan    AZ         100         200
> x %>% select(-Price,-Price.Name) %>% spread(Cost.Name,Cost)
  Date State firm1.cost firm2.cost
1  Jan    AZ         50        100