【发布时间】:2021-07-02 17:13:09
【问题描述】:
我有一个巨大的数据框,我想减少其中的 NA。 日期看起来如何的一个简短示例是这样的
| year | company | value |
|---|---|---|
| 2007 | pepsi | NA |
| 2008 | pepsi | NA |
| 2009 | pepsi | 0,5 |
| 2010 | pepsi | 2 |
| 2005 | sprite | NA |
| 2007 | sprite | NA |
| 2008 | sprite | NA |
每当一家公司有分数时,我都想用最小值替换 NA。但是,当这家公司的任何列中没有值时,我想保留 NA。所以日期看起来像这样:
| year | company | value |
|---|---|---|
| 2007 | pepsi | 0,5 |
| 2008 | pepsi | 0,5 |
| 2009 | pepsi | 0,5 |
| 2010 | pepsi | 2 |
| 2005 | sprite | NA |
| 2007 | sprite | NA |
| 2008 | sprite | NA |
这是我尝试过的代码:
df<- df %>% group_by(company) %>% mutate(value= ifelse(is.na(value), min(value, na.rm = T), value))
但是,当我在我的数据上运行它时,我得到了无限的值。我想这是因为当一家公司完全没有价值时,我不知道如何告诉 r 该怎么做。
我还尝试了一些细微的变化,例如:
df<- df %>% group_by(company) %>% mutate(value= ifelse(is.na(value), min(value, na.rm = T), "O"))
df<- df %>% group_by(company) %>% mutate(value= ifelse(is.na(value), min(value, na.rm = T), "NA"))
这些也没有用。
这里有一些可重复的数据。我希望我以正确的格式提供了它(如果有误,请告诉我,我会纠正它!):
df <- data.frame(
year = c('2007','2008','2009','2010','2005','2007','2008'),
company= c('pepsi','pepsi','pepsi','pepsi','sprite','sprite','sprite'),
value= c(NA,NA,0.5,2,NA,NA,NA)
【问题讨论】:
标签: r