涉及NaN、NA、numeric(0)的pivot_longer数据表格

3

我正在尝试将一个 tibble 转换为更长的格式。

library(tidyverse)

tbl <- tibble(
  a_X_values = list(numeric(0), c(3, NaN), c(4, 5, 6, NaN, NaN)),
  a_Y_values = list(5, NaN, numeric(0)),
  b_X_values = c(7, 8, 9),
  b_Y_values = c(NA, NaN, 1)
)

tbl_longer <- tbl %>% 
  unnest(where(is.list)) %>% 
  pivot_longer(cols = everything(), 
               names_to = c("alpha", "beta", ".value"), names_sep = "_")

我遇到了以下错误:
Error: In row 3, can't recycle input of size 5 to size 0.
Run `rlang::last_error()` to see where the error occurred.

如何修复错误?

  1. 应包括将选择的列表列解除嵌套 unnest(where(is.list))

  2. 可能的解决方案还应包括将所有numeric(0)和NaN转换为NA。

1个回答

1

问题似乎出在列表中包含的空数字值上, 如果它们没有被列出来,你的数据框就无法正常工作

如果我们对列表应用一个函数,搜索空数字值并用NA替换它们, 然后我们可以使用你的代码进行更长的旋转

library(dplyr)

tbl %>% 
  rowwise() %>% 
  mutate(across(where(is.list), \(x) ifelse(length(x) == 0, list(NA), list(x)))) %>% 
  unnest(where(is.list)) %>% 
  pivot_longer(cols = everything(), 
               names_to = c("alpha", "beta", ".value"), names_sep = "_") %>% 
  ungroup()

  alpha beta  values
   <chr> <chr>  <dbl>
 1 a     X         NA
 2 a     Y          5
 3 b     X          7
 4 b     Y         NA
 5 a     X          3
 6 a     Y        NaN
 7 b     X          8
 8 b     Y        NaN
 9 a     X        NaN
10 a     Y        NaN


1
这只是基本的R管道。如果您转到“工具”>“全局选项”>“代码”,然后单击复选框,即可使用该管道,而不是由dplyr提供的管道。 - user6836753
我遇到了错误。tbl |> 错误:在“tbl |>”中出现意外的“>”。 - SiH
请再试一次,我在更新中使用了dplyr管道。 - user6836753
不好意思,我仍然在收到错误。 - SiH
what does it say? - user6836753
显示剩余5条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接