[英]Replace NA with minimum Group Value R
我正在努力转换我的数据,希望得到一些帮助
年 | 名称 | 开始 |
---|---|---|
2010 | 爱玛 | 1998 |
2011年 | 爱玛 | 1998 |
2012 | 爱玛 | 1998 |
2009 | 约翰 | 呐 |
2010 | 约翰 | 呐 |
2012 | 约翰 | 呐 |
2007年 | 路易斯 | 呐 |
2012 | 路易斯 | 呐 |
目的是用每个名称组的年份中的最小值替换所有 NA,因此数据看起来像这样
年 | 名称 | 开始 |
---|---|---|
2010 | 爱玛 | 1998 |
2011年 | 爱玛 | 1998 |
2012 | 爱玛 | 1998 |
2009 | 约翰 | 2009 |
2010 | 约翰 | 2009 |
2012 | 约翰 | 2009 |
2007年 | 路易斯 | 2007年 |
2012 | 路易斯 | 2007年 |
注意:一个名称组的所有起始值要么都是 NA,要么都不是
我试着用
mydf %>% group_by(name) %>% mutate(start= ifelse(is.na(start), min(year, na.rm = T), start))
但得到了这个错误
x `start` must return compatible vectors across groups
这里有很多类似的问题。 这里有些人使用 ave function 或使用 data.table 这两个似乎都不符合我的问题
我的基地 function 一定是这样的
df$A <- ifelse(is.na(df$A), df$B, df$A)
但是我似乎无法将它与 min() 和 group by() function 正确组合。
感谢您的任何帮助
我将 colname 更改为“Year”,因为它与
dat %>%
dplyr::group_by(name) %>%
dplyr::mutate(start = dplyr::if_else(start == "na", min(Year), start))
# A tibble: 8 x 3
# Groups: name [3]
Year name start
<chr> <chr> <chr>
1 2010 Emma 1998
2 2011 Emma 1998
3 2012 Emma 1998
4 2009 John 2009
5 2010 John 2009
6 2012 John 2009
7 2007 Louis 2007
8 2012 Louis 2007
我们可以使用na.aggregate
library(dplyr)
library(zoo)
dat %>%
group_by(name) %>%
mutate(start = na.aggregate(na_if(start, "na"), FUN = min))
tidyverse 中有一个replace_na()
tidyverse
可以在mutate()
中使用。
这将用year
的最小值替换start
列中的NA
。
library(tidyverse)
mydf %>%
group_by(name) %>%
mutate(start = replace_na(start, min(year)))
# A tibble: 8 x 3
# Groups: name [3]
year name start
<dbl> <chr> <dbl>
1 2010 Emma 1998
2 2011 Emma 1998
3 2012 Emma 1998
4 2009 John 2009
5 2010 John 2009
6 2012 John 2009
7 2007 Louis 2007
8 2012 Louis 2007
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.