【问题标题】:Adding rows to data frame with zero values将行添加到具有零值的数据框中
【发布时间】:2019-08-26 12:53:16
【问题描述】:

我有一个包含多个记录的数据集,每个记录都分配了一个国家,我想使用 rworldmap 创建一个世界地图,根据每个国家在数据集中出现的频率进行着色。并非所有国家/地区都出现在数据集中 - 要么因为它们没有相应的记录,要么因为它们不符合条件(例如中/低收入国家)。

为了构建地图,我创建了一个基于国家/地区表的数据框 (dfmap),其中一列是国家代码,第二列是它在数据集中出现的频率。

为了在地图上识别符合条件但没有记录的国家/地区,我尝试使用 add_row 将这些添加到我的数据框中,例如安道尔:

add_row(dfmap, Var1="AND", Freq=0)

当我为每个国家/地区运行 add_row 时,它似乎可以工作(没有错误消息,并且该新行出现在命令下方的表格中) - 但之前添加的行没有出现 Freq=0。

然后,当我使用“dfmap”或“summary(dfmap)”查看数据框时,没有出现 Freq=0 的行,当我构建地图时,它们的颜色与缺失国家的颜色相同。

我不确定我哪里出错了,欢迎提出任何建议。

非常感谢

【问题讨论】:

  • 请附上一个可重现的示例以及预期的输出。
  • 使用dplyr::left_join 并将您的不完整数据框与包含所有国家/地区的完整数据框结合起来可能更简单,更可复制……至少这将为您提供所需的所有内容的完整列表。 ..如果您希望Freq 不是那些失踪国家/地区的NA,您可以%>% mutate(ifelse(is.na(Freq), 0, Freq)))

标签: r tidyverse


【解决方案1】:

使用上面评论中建议的方法,可以使用 join 函数,然后使用 replace_na 函数创建一个包含完整国家/地区的 tibble,并将它们的计数值设为零。

由于问题中没有示例数据,我根据我认为问题所暗示的内容在下面创建了两个数据框。

dfrm_counts = tibble(Country = c('England','Germany'),
Count =     c(1,4))

dfrm_all = tibble(Country = c('England', 'Germany', 'France')) 

dfrm_final = dfrm_counts %>%
right_join(dfrm_all, by = "Country") %>%
replace_na(list(Count = 0))

dfrm_final
# A tibble: 3 x 2
Country Count
<chr>   <dbl>
1 England     1
2 Germany     4
3 France      0

【讨论】:

    猜你喜欢
    • 2014-03-29
    • 2016-04-12
    • 2015-06-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-07-03
    相关资源
    最近更新 更多