Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/webpack/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R pivot_wide()参数表示不同的行数或_R_Data.table_Pivot_Tidyr - Fatal编程技术网

R pivot_wide()参数表示不同的行数或

R pivot_wide()参数表示不同的行数或,r,data.table,pivot,tidyr,R,Data.table,Pivot,Tidyr,我有以下名为x的data.table对象: month.option som.month all.year 56.6% diff -0.9% 当我执行以下操作时: x %>% pivot_wider(names_from = month.option, values_from = som.month) %>% select(diff, everything()) %>%

我有以下名为
x
的data.table对象:

 month.option   som.month
  all.year        56.6%
     diff        -0.9%

当我执行以下操作时:

x %>% pivot_wider(names_from = month.option, values_from = som.month) %>%
                select(diff, everything()) %>%
                set_names(c("Dif vs MA", "SOM YTD", "SOM AA"))
我得到了以下错误:
data.frame中的错误(row=row\u id,col=col\u id):参数意味着不同的行数:0,2。但是我不明白原因,因为
x
是一个2x2 data.table。如果有人知道我没有看到的一个可能的问题,我将感谢您的纠正


作为旁注,所有列的类型都是
字符
,如果这是任何有用的信息

如果我们想使用
透视(pivot)
,我们可以通过将
值fn
指定为
I

library(dplyr)
library(tidyr)
x %>% 
  pivot_wider(names_from = month.option, values_from = som.month, values_fn =  I)
# A tibble: 1 x 2
#  all.year diff    
#  <I<chr>> <I<chr>>
#1 56.6%    -0.9%  

然而,使用
数据的
转置
可以很容易地解决这类问题

data.table::transpose(x, make.names = 'month.option')
#  all.year  diff
#1    56.6% -0.9%

或者将
碎片整理
一起用作可存储行
,这将更直接

library(tibble)
deframe(x) %>%
   as_tibble_row
# A tibble: 1 x 2
#  all.year diff 
#  <chr>    <chr>
#1 56.6%    -0.9%
数据
x使用相同的
pivot\u wider()
尝试此
tidyverse
解决方案。您遇到问题,因为函数无法正确识别行。创建id是解决方案:

#Code
df %>% mutate(id=1) %>%
 pivot_wider(names_from = month.option,values_from=som.month) %>%
select(-1)
输出:

# A tibble: 1 x 2
  all.year diff 
  <chr>    <chr>
1 56.6%    -0.9%
#一个tible:1 x 2
全年差异
1 56.6%    -0.9%
使用的一些数据:

#Data
df <- structure(list(month.option = c("all.year", "diff"), som.month = c("56.6%", 
"-0.9%")), class = "data.frame", row.names = c(NA, -2L))
#数据

df如果您有
数据。表
我们也可以使用
dcast

library(data.table)
dcast(x, rowid(month.option)~month.option, value.var = 'som.month')

#   month.option all.year  diff
#1:            1    56.6% -0.9%
# A tibble: 1 x 2
  all.year diff 
  <chr>    <chr>
1 56.6%    -0.9%
#Data
df <- structure(list(month.option = c("all.year", "diff"), som.month = c("56.6%", 
"-0.9%")), class = "data.frame", row.names = c(NA, -2L))
library(data.table)
dcast(x, rowid(month.option)~month.option, value.var = 'som.month')

#   month.option all.year  diff
#1:            1    56.6% -0.9%