r - 使用 id 匹配和替换因子值

标签 r data-manipulation recode

我有两个数据帧,它们都包含相同的变量和每个观察的唯一 ID。

df.1 是一个大型数据集,其中包含由 NA 表示的缺失值。这些缺失条目的值包含在 df.2 中,我想通过匹配 id 将 df.1 中的缺失值替换为 df.2 中的值。

我在这里找不到类似的问题,考虑到它们都是因子变量。

为了让事情变得更简单:如果 id 匹配 - df.1 中的缺失值应替换为 df.2 中的因子值。

df.1 <- data.frame(id = c(334,440,501,2304,2500), 
                v1 = c("4 dogs",NA,"3 dogs",NA,"No dogs"))

df.2 <- data.frame(id = c(440,2304), 
                v2 = c("4 dogs","5 dogs"))

非常感谢您的帮助。

最佳答案

正如 @Gregor 提到的,您可以将 df 转换回因子。这里方便的函数是@MrFlick 的coalesce 函数。解决方案是不言自明的

library(dplyr)

df.1 %>%
  left_join(df.2, by = "id") %>%
  mutate_if(is.factor, as.character) %>%
  mutate(final = coalesce(v1, v2))  %>% mutate_if(is.character, as.factor)

输出

   id      v1     v2   final
1  334  4 dogs   <NA>  4 dogs
2  440    <NA> 4 dogs  4 dogs
3  501  3 dogs   <NA>  3 dogs
4 2304    <NA> 5 dogs  5 dogs
5 2500 No dogs   <NA> No dogs

将上述结果存储在变量(df)中,然后检查str(df)

'data.frame':   5 obs. of  4 variables:
 $ id   : num  334 440 501 2304 2500
 $ v1   : Factor w/ 3 levels "3 dogs","4 dogs",..: 2 NA 1 NA 3
 $ v2   : Factor w/ 2 levels "4 dogs","5 dogs": NA 1 NA 2 NA
 $ final: Factor w/ 4 levels "3 dogs","4 dogs",..: 2 2 1 3 4

如果您想删除 v1v2 列,只需将最终结果通过管道传输到 %>% select(id,final)

希望它能起作用。

关于r - 使用 id 匹配和替换因子值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48082787/

相关文章:

r - 向量化矩阵

r - 如何更改 ggplot 图中某个因素的 1 个级别的美观和外观

python - 多次复制特定 ID 的多行事件

将分类变量重新编码为二进制 (0/1)

r - 如何在 dplyr 中使用 recode_factor 来重新编码多个因子值?

r - 如何在 R 包加载时干净地定义一组变量并在卸载时清除它们?

r - 强制 R(和 Rstudio)在 Windows 上使用虚拟内存

python - 转置除一列时间戳之外的数据帧

regex - 使用 UNIX/Linux 操作(排除行).csv 文件的特定列

r - 根据 R 中另一个变量的条件重新编码变量的最简单方法是什么?