为什么我使用 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
我正在尝试从具有以下结构的数据框开始:
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