Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/79.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
对于R数据帧中的列,即使一个值不是NA,也要替换所有NA';那值多少钱?_R_Dataframe - Fatal编程技术网

对于R数据帧中的列,即使一个值不是NA,也要替换所有NA';那值多少钱?

对于R数据帧中的列,即使一个值不是NA,也要替换所有NA';那值多少钱?,r,dataframe,R,Dataframe,我在R中有一个数据帧,有20多列和几百万行。对于给定的id,数据帧可以有大约100个观察值。我创建这个数据帧的方法是合并两个数据帧。因此,对于给定的id,对于一个列,比如date,即使其中一个值不是NA,那么我想用我找到的值替换该id的date列中的所有NA值。此列由我在其他一些代码中生成,因此它可以有一个唯一值或NA,而没有其他值 我能找到的最接近的类似问题是 这是我能想到的最好的解决方案,但我相信有一种更优雅的方法: merged_df <- merged_df %>%

我在R中有一个数据帧,有20多列和几百万行。对于给定的id,数据帧可以有大约100个观察值。我创建这个数据帧的方法是合并两个数据帧。因此,对于给定的id,对于一个列,比如date,即使其中一个值不是NA,那么我想用我找到的值替换该id的date列中的所有NA值。此列由我在其他一些代码中生成,因此它可以有一个唯一值或NA,而没有其他值

我能找到的最接近的类似问题是

这是我能想到的最好的解决方案,但我相信有一种更优雅的方法:

merged_df <- merged_df %>%
    filter(isAMI == 1) %>%
    group_by(accountnumber) %>% 
    mutate(amiStartDate = if_else(id == 1,
                                  amiStartDate[!is.na(amiStartDate)][1],
                                  amiStartDate))
merged_df%
过滤器(isAMI==1)%>%
分组人(账号)%>%
突变(amiStartDate=if_else(id==1,
amiStartDate[!is.na(amiStartDate)][1],
阿米斯塔特

基本的想法是,我正在找到我想要进行更改的正确位置,并更改与NA值对应的所有条目

您喜欢这项工作吗

library(magrittr)
dta = data.frame(
  id = c(1,1,1,1,2,2,2,2),
  value = c(rep(NA, 3), 2, 1, NA, NA, NA)
) 

dta %>%
  dplyr::group_by(id) %>%
  dplyr::mutate(
    value = max(value, na.rm = TRUE)
  )
#> # A tibble: 8 x 2
#> # Groups:   id [2]
#>      id value
#>   <dbl> <dbl>
#> 1     1     2
#> 2     1     2
#> 3     1     2
#> 4     1     2
#> 5     2     1
#> 6     2     1
#> 7     2     1
#> 8     2     1
库(magrittr)
dta=data.frame(
id=c(1,1,1,1,2,2,2),
值=c(代表(不适用,3),2,1,不适用,不适用,不适用)
) 
dta%>%
dplyr::分组依据(id)%>%
dplyr::突变(
值=最大值(值,na.rm=真)
)
#>#A tibble:8 x 2
#>#组:id[2]
#>id值
#>    
#> 1     1     2
#> 2     1     2
#> 3     1     2
#> 4     1     2
#> 5     2     1
#> 6     2     1
#> 7     2     1
#> 8     2     1

是的,这很有效,也很聪明。我的解决方案比这要复杂得多。