在 RStudio 中运行 pivot_wider() 时这些错误消息的含义是啥?

Posted

技术标签:

【中文标题】在 RStudio 中运行 pivot_wider() 时这些错误消息的含义是啥?【英文标题】:What is the meaning of these error messages in running pivot_wider() in RStudio?在 RStudio 中运行 pivot_wider() 时这些错误消息的含义是什么? 【发布时间】:2021-03-26 09:23:02 【问题描述】:

我是 R 的新手。有人可以帮助我吗?

我导入了一个 CSV 文件,其中提取了 *** 数据,

s <- read_csv("https://www.ics.uci.edu/~duboisc/***/answers.csv")

然后,我将 'tags' 列中的不同值分成行,

ss1 <- separate_rows(ss, tags)

然后,我将pivot_wider() 应用于“标签”列,

ss2 <- pivot_wider(ss1, names_from = tags, values_from = qs)

显示以下错误消息,

错误:compact_rep() 中的内部错误:compact_rep() 中的负 n。 运行rlang::last_error() 以查看错误发生的位置。 另外:警告信息: 1:值不是唯一标识的;输出将包含 list-cols。

使用values_fn = list 取消此警告。 使用values_fn = length 确定重复出现的位置 使用values_fn = summary_fun 汇总重复项 2:在 nrow * ncol : 整数溢出产生的 NAs

我已经搜索了这些消息中的不同关键字,但无法找出这些错误的总体含义。有谁能帮助我吗?谢谢。

【问题讨论】:

感谢您的帮助。由于我没有正确和成功地做到这一点,我不明白为什么会有“重复行”。而且,“X1”列中的值是否已经有助于区分重复行?我已经尝试过你的建议,ss3 <- ss1 %>% mutate(id = row_number()) 然后,pivot_wider 它再次为 ss4 <- pivot_wider(ss3, names_from = tags, values_from = qs) 现在,得到新的错误,Error: Internal error in `compact_rep()`: Negative `n` in `compact_rep()`. Run `rlang::last_error()` to see where the error occurred.(见下一条评论) In addition: Warning message: In nrow * ncol : NAs produced by integer overflow 请给我进一步的指示好吗?谢谢。 我发布了我的答案,请检查一下,让我知道这是否是您所关注的。 感谢您的建议。它在这个问题上对我很有帮助。 【参考方案1】:

@Anoushiravan R:

再次感谢您的好意建议。

根据您的建议,我发现了这些错误消息,

> ss1 <- s %>%
+     separate_rows(tags) %>% 
+     select(qs, tags) %>%
+     group_by(tags) %>%
+     mutate(id = row_number()) %>%
+     ungroup() %>%
+     mutate(tags = if_else(tags == "", "unknown", tags))
> ss2 <- ss1 %>% pivot_wider(names_from = tags, values_from = qs, names_repair = "minimal")

Error: cannot allocate vector of size 5.4 Gb

以前,我总是收到另一条错误消息In nrow * ncol : NAs produced by integer overflow

然后,我 google In nrow * ncol : NAs produced by integer overflow 并发现它可能与控制台窗格有关。见https://github.com/wrathematics/float/issues/17

另外,我删除了“全局环境”中的所有对象/数据集并重新启动 RS,现在我得到了你的结果。

由于我想在结果中包含所有列,因此我从您的建议中删除了“select(qs, tags) %>%”,并带有以下代码和错误,

> ss1 <- s %>%
+     separate_rows(tags) %>% 
+     
+     group_by(tags) %>%
+     mutate(id = row_number()) %>%
+     ungroup() %>%
+     mutate(tags = if_else(tags == "", "unknown", tags))
> View(ss1)
> ss2 <- ss1 %>% pivot_wider(names_from = tags, values_from = qs, names_repair = "minimal")

Error: Internal error in `compact_rep()`: Negative `n` in `compact_rep()`.
Run `rlang::last_error()` to see where the error occurred.
In addition: Warning message:
In nrow * ncol : NAs produced by integer overflow

In nrow * ncol : NAs produced by integer overflow 再次出现。

我在谷歌上搜索了第一个重大错误,Error: Internal error in `compact_rep()`: Negative `n` in `compact_rep(),但找不到好的答案。

我也尝试了与“group_by”的不同组合,但无法获得满意的结果。无论如何,非常感谢您的帮助。

【讨论】:

我也收到了同样的错误,我认为这与 R 的内存限制有关,当我重新启动我的 R 会话时,我得到了结果。但我不知道如何解决这个问题。最后,我至少很高兴我们在某种程度上得到了您感兴趣的结果。很高兴也欢迎您。 之前评论中的超链接和 google 建议 R 将整个数据集加载到 RAM 中,因此大小的限制取决于您的 RAM 的物理大小。因此,当我清理 RS 中不需要的数据集时,我们可以得到结果。 这个号码2^31 - 1 总是出现在我的搜索结果中。看完***.com/a/48676389/15484790和***.com/a/5234293/15484790后,我想这些可能是主要错误的答案。在我的数据集中,总数。行数是 1,007,855,并且没有。 pivot_wider() 之后的列数将为 10,534。所以 row x col = 10,616,744,570 这比2^31 - 1 = 2,147,483,647 是的,我明白了,那么最后的输出是你要找的那个吗?我猜如果你在 SQL 中做同样的数据操作,你不会得到错误。 是的,这些都是我打算做的。至少,我现在了解了这些限制。【参考方案2】:

好的,我编辑了我的解决方案,我希望这是您正在寻找的东西。这次我根据您的建议使用separate_rows 来分隔tags 列中每一行中堆叠的值。运行以下代码,然后让我知道您是否需要其他任何东西。

s %>%
  separate_rows(tags) %>% 
  select(qs, tags) %>%
  group_by(tags) %>%
  mutate(id = row_number()) %>%
  ungroup() %>%
  mutate(tags = if_else(tags == "", "unknown", tags)) %>%
  pivot_wider(names_from = tags, values_from = qs, names_repair = "minimal")


# A tibble: 68,384 x 10,522
      id   php error    gd image processing  lisp scheme subjective clojure cocoa touch
   <int> <dbl> <dbl> <dbl> <dbl>      <dbl> <dbl>  <dbl>      <dbl>   <dbl> <dbl> <dbl>
 1     1     0     0     0     0          0    10     10         10      10     0     0
 2     2     0     0     0     0          0    10     10         10      10     0     0
 3     3     1     0     1     1          1    10     10         10      10     0     0
 4     4     1     2     0     1          1    10     10         10      10     1     1
 5     5     1     2     0     1          1    10     10         10      10     0     0
 6     6     2     2     1     1          1    10     10         10      10     1     1
 7     7     2     2     1     0          1    10     10         10      10     1     1
 8     8     2     2     0     0          1    10     10         10      10     3     3
 9     9     0     2     0     0          1    10     10         10      10     3     3
10    10     0     2     0     0          1    10     10         10      10     3     3
# ... with 68,374 more rows, and 10,510 more variables

由于这里的数据有点重,我建议你先运行代码直到pivot_wider,然后运行pivot_wider 行。我不知道为什么,但只有这样我才能获得所需的输出,否则我会收到错误。

【讨论】:

感谢您的帮助。 感谢您的帮助。你的建议是我打算做的,除了我想用“标签”中的值创建新列。这就是我首先使用ss1 &lt;- separate_rows(ss, tags) 的原因。由于我正在尝试使用枢轴功能,所以我现在不在乎 NA。谢谢你的提醒。我不明白您对“group_by”的使用,因为“id”现在是组中所有个人成员的 id,从 1 开始,这不是唯一的。我对么?但我仍然在想它是如何得到这个结果的。你的最后评论激励了我,我尝试了以下方法,但仍然失败, ss1 &lt;- ss %&gt;% separate_rows(tags) ss2 &lt;- ss1 %&gt;% mutate(id=c(1:nrow(ss1))) ss3 &lt;- ss2 %&gt;% pivot_wider(names_from = tags, values_from = qs) 错误:compact_rep() 中的内部错误:compact_rep() 中的负 n。运行rlang::last_error() 以查看错误发生的位置。另外:警告信息:在 nrow * ncol : NAs 由整数溢出产生 抱歉,您上次的评论中还有一个问题,“当列值的组合不唯一时,通常会发生此错误,因此我们需要在应用 pivot_wider 之前为每一行创建唯一的 ID。”如果我创建一个新的 RAW 数据框,我不能有重复的行是否正确,即所有列中值完全相同的行? 从你的评论来看,到目前为止我只能处理这个问题,ss1 &lt;- s %&gt;% group_by(tags) %&gt;% mutate(id = row_number()) %&gt;% separate_rows(tags)。之后,如果尝试旋转它,则会再次显示错误。

以上是关于在 RStudio 中运行 pivot_wider() 时这些错误消息的含义是啥?的主要内容,如果未能解决你的问题,请参考以下文章

在 Rstudio 之外运行闪亮的应用程序

有没有办法直接使用链接在 RStudio 中运行保存的 bigquery? [复制]

优化 expand/pivot_wider R 以标记时间段的所有月份

R语言tidyr包pivot_longer函数pivot_wider函数数据表变换实战(长表到宽表宽表到长表)

pivot_wider 问题“`values_from` 中的值不是唯一标识的;输出将包含 list-cols”

如何在从模板创建 RStudio 项目期间运行 Shiny 应用程序?