【发布时间】:2021-05-22 14:28:30
【问题描述】:
我正在努力转换我的数据,希望能得到一些帮助
| year | name | start |
|---|---|---|
| 2010 | Emma | 1998 |
| 2011 | Emma | 1998 |
| 2012 | Emma | 1998 |
| 2009 | John | na |
| 2010 | John | na |
| 2012 | John | na |
| 2007 | Louis | na |
| 2012 | Louis | na |
目的是用每个名称组的最小值替换所有 NA,使数据看起来像这样
| year | name | start |
|---|---|---|
| 2010 | Emma | 1998 |
| 2011 | Emma | 1998 |
| 2012 | Emma | 1998 |
| 2009 | John | 2009 |
| 2010 | John | 2009 |
| 2012 | John | 2009 |
| 2007 | Louis | 2007 |
| 2012 | Louis | 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 函数或使用 data.table 似乎都不适合我的问题
我的基本功能一定是这样的
df$A <- ifelse(is.na(df$A), df$B, df$A)
但是我似乎无法将它与 min() 和 group by() 函数正确结合。
感谢您的帮助
【问题讨论】:
-
mydf %>% group_by(name) %>% mutate(start= ifelse(is.na(start), min(year, na.rm = T), start))为我工作。请使用dput以可重复的格式提供数据。阅读how to give a reproducible example
标签: r