【问题标题】:R - Wrong error message - Error: Duplicate identifiers for rows [duplicate]R - 错误的错误消息 - 错误:行的标识符重复 [重复]
【发布时间】:2018-06-01 09:36:18
【问题描述】:

我有一个需要重塑的数据框的问题。

我有这个命令:

library(tidyverse)
df1 = df1 %>% gather(Day, value, Day01:Day31) %>% spread(Station, value)

我得到这个错误:

Error: Duplicate identifiers for rows (130933, 131029), (389113, 389209), (647293, 647389), (905473, 905569), (1163653, 1163749), (1421833, 1421929), (1680013, 1680109), (1938193, 1938289), (2196373, 2196469), (2454553, 2454649), (2712733, 2712829), (2970913, 2971009), (3229093, 3229189), (3487273, 3487369), (3745453, 3745549), (4003633, 4003729), (4261813, 4261909), (4519993, 4520089), (4778173, 4778269), (5036353, 5036449), (5294533, 5294629), (5552713, 5552809), (5810893, 5810989), (6069073, 6069169), (6327253, 6327349), (6585433, 6585529), (6843613, 6843709), (7101793, 7101889), (7359973, 7360069), (7618153, 7618249), (7876333, 7876429), (130934, 131030), (389114, 389210), (647294, 647390), (905474, 905570), (1163654, 1163750), (1421834, 1421930), (1680014, 1680110), (1938194, 1938290), (2196374, 2196470), (2454554, 2454650), (2712734, 2712830), (2970914, 2971010), (3229094, 3229190), (3487274, 3487370), (3745454, 3745550), (4003634, 4003730), (4261814, 4261910), (4519994, 4520090

奇怪的是我也得到了这个结果:

library(dplyr)
test = rownames_to_column(df1, "VALUE")
length(unique(test$VALUE)) ### Result 258180 = Same as number of rows
length(unique(test$VALUE)) == nrow(test) #### Result TRUE

如您所见,错误消息还包含我的数据框中甚至不存在的行。

该命令适用于我拥有的所有其他数据帧,它们具有 1:1 相同的结构。它们只有更少的行数。

我不知道如何为您提供数据框,因为它太大了。我把它上传到我的大学,所以你可以下载数据框。

这是链接(我希望它允许这样发布)

https://megastore.uni-augsburg.de/get/pmAS15z6TN/

【问题讨论】:

  • 您应该编辑以发布重现问题的数据子集,最好发布调用dput的结果。

标签: r dataframe tidyr tidyverse


【解决方案1】:

这应该有效。正如评论所指出的,这是因为spread 尝试组合在gather 之后不再唯一标识的行。 rowid_to_column 是一个将行 ID 转换为列的简单函数。这些数字大于原始数据集大小的原因是因为收集后您有一个包含 8003580 行的数据框。

data2 <- data %>%
    gather(Day, value, Day01:Day31) %>%
    tibble::rowid_to_column() %>%
    spread(Station, value)

我在尝试在笔记本电脑上实际执行此操作时遇到了内存问题。

【讨论】:

  • 非常感谢!我测试了它,我也有内存问题....我也只有一台笔记本电脑,直到现在它仍然能够处理它。我现在将在桌面上尝试它。但至少我没有得到与以前相同的错误。