r - pivot_wider() 参数意味着不同的行数 Eroor
问题描述
我有以下 data.table 对象称为x
:
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"))
我收到以下错误:Error in data.frame(row = row_id, col = col_id) : arguments imply differing number of rows: 0, 2
。但是我不明白原因,因为x
它是一个 2x2 data.table。如果有人知道我没有看到的可能问题,我将不胜感激。
作为旁注,所有列都是 type character
,如果这是任何有用的信息
解决方案
如果我们想使用pivot_wider
,我们可以在不创建新列的情况下通过指定values_fn
asI
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%
或者也可以是获取first
元素的函数
x %>%
pivot_wider(names_from = month.option,
values_from = som.month, values_fn = first)
# A tibble: 1 x 2
# all.year diff
# <chr> <chr>
#1 56.6% -0.9%
但是,这些问题可以很容易地transpose
从data.table
data.table::transpose(x, make.names = 'month.option')
# all.year diff
#1 56.6% -0.9%
或者使用deframe
whichas_tibble_row
会更直接
library(tibble)
deframe(x) %>%
as_tibble_row
# A tibble: 1 x 2
# all.year diff
# <chr> <chr>
#1 56.6% -0.9%
或者另一种选择是将第一列转换为行名,进行转置t
并转换为tibble
(或data.frame
)
x %>%
column_to_rownames('month.option') %>%
t %>%
as_tibble
# A tibble: 1 x 2
# all.year diff
# <chr> <chr>
#1 56.6% -0.9%
数据
x <- structure(list(month.option = c("all.year", "diff"), som.month = c("56.6%",
"-0.9%")), class = "data.frame", row.names = c(NA, -2L))
推荐阅读
- java - Android push notification : Multiple notifications displays same data
- c++ - Win toast / 气球通知最近在带有 Qt 的 Windows 10 上停止工作
- javascript - 将新数据添加到现有的 scope-angularjs
- python-3.x - 从嵌套字典中获取最小值
- python - 烧瓶中的线程数
- c++ - 通用 2D 点作为 C++ 中的输入
- linux - 如何仅在出错时中止功能,但不中止脚本?
- python - 在 Arch 上通过 pip 安装 webrtcvad 时出现问题
- sql-server - 所以我们将数据从 .mdb 迁移到 SQL Server
- c# - 在 VR Oculus Quest 中闪烁?