【发布时间】:2021-12-01 10:45:05
【问题描述】:
我有两个数据框,一个长一个宽,我正在尝试将两者合并在一起。我有宽格式的人口统计信息,我需要将其转换为长格式进行分析。当我合并两个数据框时,宽格式的信息只填充一行,其余为空白。
这里有一些示例数据来展示我正在使用的内容以及我希望的结果。唯一的问题是合并在示例数据中有效,但在我的实际数据中无效。
df_long <- data.frame (id = c(123, 123, 123, 345, 345),
x = c("abc", "cgf", "add", "wer", "nko"),
y = c(234, 234, 5436, 73435, 2353))
df_wide <- data.frame(id = c(123, 345),
person = c("Mom", "Teen"))
当我使用此代码合并示例数据时,它会产生我想要的数据
df_goal <- merge(df_long, df_wide)
当我使用这段代码时,它有正确数量的变量,但是 0 个观察值。
real_merged <- merge(real_long, real_wide)
为了解决这个问题,我添加了all = T 参数,但我得到的观察结果比我预期的要多。看起来合并只是将观察的数量从 df_wide 添加到 df_long,但与 ID 不匹配。我已经在视觉上确认有匹配的 ID,所以这不应该发生。
我的真实数据有超过 10 万行和 150 个变量。我不确定这是否与它有关,所以我只是把它扔在那里。
我尝试在合并函数中使用不同的参数,例如 all = T,但也没有使用它,以及 by = 和 by.x = ,但没有一个结果是我想要的。我也研究过使用melt(),但我无法让它工作。
由于没有错误并且它不会在示例数据中重现,因此几乎不可能进行故障排除。我希望有人遇到过类似的问题并且知道解决方法。
【问题讨论】:
-
欢迎来到 SO,Brian_p!我建议对您的问题进行编辑,以清理一些格式;也就是说,代码块(多于一行)应该在各自的行上都有“代码围栏”,从
```r(没有代码)开始,然后是```,同样,每个都在文本行上完全隔离。格式化代码的两个很好的参考是meta.stackexchange.com/a/22189 和stackoverflow.com/editing-help。 (这主要是为了美观,但有时格式错误的代码有点难以阅读,所以我经常尝试帮助清理。) -
@r2evans,感谢您提供有关格式化帖子的信息。我会查看您提供的链接并尝试更新我的示例中的代码。
-
id的值可能略有不同,即使它们在显示时看起来相同,也会导致连接中的行不匹配。如果ids 应该是整数,请尝试在合并之前使用as.integer更改它们。这将解决问题,例如123实际上是123.000000001显示为123。 -
@IceCreamToucan,我仔细检查了两个变量的
typeof()和class()相同。 -
它们是什么?如果它们是双打,它们可能看起来相同但具有不同的值。