Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/81.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值,除非只有NAs_R_Dplyr - Fatal编程技术网

R 如何按组选择非NA值,除非只有NAs

R 如何按组选择非NA值,除非只有NAs,r,dplyr,R,Dplyr,我想按id和年份为变量v1和v2选择非NA值(在我的实际数据集中有两个以上的变量,如v1和v2),除非只有NAs 我还想将其设置为,如果id值和年份值冲突,我选择最后一行 > id<- c(1, 1, 1, 2, 2, 2, 2, 3, 3, 4, 4, 5,5) > year<-c(2014, 2014, 2019, 2014, 2014, 2014, 2020, 2018, 2018, 2017, 2018, 2019, 2019) > v1<- c(&q

我想按id和年份为变量v1和v2选择非NA值(在我的实际数据集中有两个以上的变量,如v1和v2),除非只有NAs

我还想将其设置为,如果id值和年份值冲突,我选择最后一行

> id<- c(1, 1, 1, 2, 2, 2, 2, 3, 3, 4, 4, 5,5)
> year<-c(2014, 2014, 2019, 2014, 2014, 2014, 2020, 2018, 2018, 2017, 2018, 2019, 2019)
> v1<- c("a", NA, NA, NA, "b", "a", "b", NA, NA, "c", NA, "a", NA)
> v2<- c(NA, "x", "y", "z", "z","z","z", "x", NA, NA, "x", "x", "x")
> df <- as.data.frame(cbind(id, year, v1, v2))
> df
   id year   v1   v2
1   1 2014    a <NA>
2   1 2014 <NA>    x
3   1 2019 <NA>    y
4   2 2014 <NA>    z
5   2 2014    b    z
6   2 2014    a    z
7   2 2020    b    z
8   3 2018 <NA>    x
9   3 2018 <NA> <NA>
10  4 2017    c <NA>
11  4 2018 <NA>    x
12  5 2019    a    x
13  5 2019 <NA>    x
>id年份v1 v2 df
身份证年份v1 v2
1 2014年1月a日
2 1 2014 x
2011年3月1日
2014年4月2日
5.2 2014年b z
6.2 2014 a z
7220BZ
8 3 2018 x
9   3 2018  
10.4 2017 c
11 4 2018 x
12 5 2019 a x
13 5 2019 x
我希望我的结果是这样的:

 id year   v1   v2
1   1 2014    a    x
3   1 2019 <NA>    y
6   2 2014    a    z
7   2 2020    b    z
8   3 2018 <NA>    x
10  4 2017    c <NA>
11  4 2018 <NA>    x
12  5 2019    a    x
id年份v1 v2
1 2014 a x
2011年3月1日
6.2 2014 a z
7220BZ
8 3 2018 x
10.4 2017 c
11 4 2018 x
12 5 2019 a x

我试图将dplyr与group_by一起使用,但在运行时遇到问题。谢谢

分组后,您可以尝试汇总并在删除
NA
后获取
last

library(dplyr)

df %>%
  group_by(id, year) %>%
  summarise(v1 = last(na.omit(v1)), 
            v2 = last(na.omit(v2)))
要对所有列(分组中使用的列除外)使用
摘要
,可以执行以下操作:

df %>%
  group_by(id, year) %>%
  summarise_all(~ last(na.omit(.)))
输出

  id    year  v1    v2   
  <chr> <chr> <chr> <chr>
1 1     2014  a     x    
2 1     2019  NA    y    
3 2     2014  a     z    
4 2     2020  b     z    
5 3     2018  NA    x    
6 4     2017  c     NA   
7 4     2018  NA    x    
8 5     2019  a     x 
id年份v1 v2
1 2014 a x
2011年11月2日
3.2 2014 a z
4200BZ
5.3 2018北美x
6.4 2017年加拿大
7.4 2018北美
8 5 2019 a x

此解决方案有效,非常好-我想指出,如果其他人有此问题,此解决方案将删除NAs,直到我卸载包data.table。