我有以下类型的数据框:
Country <- rep(c("USA", "AUS", "GRC"),2)
Year <- 2001:2006
Level <- c("rich","middle","poor",rep(NA,3))
df <- data.frame(Country, Year,Level)
df
Country Year Level
1 USA 2001 rich
2 AUS 2002 middle
3 GRC 2003 poor
4 USA 2004 <NA>
5 AUS 2005 <NA>
6 GRC 2006 <NA>
我想在右列的最后用正确的级别标签填充缺失值。
所以预期的结果应该是这样的:
Country Year Level
1 USA 2001 rich
2 AUS 2002 middle
3 GRC 2003 poor
4 USA 2004 rich
5 AUS 2005 middle
6 GRC 2006 poor
最佳答案
我们可以按“国家/地区”分组并获得非 NA 唯一值
library(dplyr)
df %>%
group_by(Country) %>%
dplyr::mutate(Level = Level[!is.na(Level)][1])
# A tibble: 6 x 3
# Groups: Country [3]
# Country Year Level
# <fctr> <int> <fctr>
#1 USA 2001 rich
#2 AUS 2002 middle
#3 GRC 2003 poor
#4 USA 2004 rich
#5 AUS 2005 middle
#6 GRC 2006 poor
如果我们已经加载
dplyr
连同 plyr
,最好明确指定 dplyr::mutate
或 dplyr::summarise
以便它使用来自 dplyr
的函数. plyr
中也有同样的功能它可能会屏蔽 dplyr
的功能当两者都加载时创建不同的行为。
关于r - 填补缺失的水平,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47930802/