Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/75.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
如何通过忽略NA'提取唯一行;s在R_R_Dataframe - Fatal编程技术网

如何通过忽略NA'提取唯一行;s在R

如何通过忽略NA'提取唯一行;s在R,r,dataframe,R,Dataframe,我有一个包含多行和多列的数据集,我想通过在少数情况下忽略一列中的NA并在少数情况下包括NA来提取唯一的行。请看下面的详细信息 数据集_A e_id age fn ln custom_id e1234 23 sur bab 1344789 e1234 23 sur bab 1344789 e1234 23 sur bab 1617 e1234 23 sur bab

我有一个包含多行和多列的数据集,我想通过在少数情况下忽略一列中的NA并在少数情况下包括NA来提取唯一的行。请看下面的详细信息

数据集_A

e_id      age    fn    ln     custom_id
e1234     23     sur   bab    1344789
e1234     23     sur   bab    1344789
e1234     23     sur   bab    1617
e1234     23     sur   bab    NA
e2345     22     nav   kum    NA
e2345     22     nav   kum    52109
e2345     22     nav   kum    NA
e3456     21     ash   kuma   NA
e3456     21     ash   kuma   NA
e4567     23     anu   kot    NA
预期产量

e_id      age    fn    ln     custom_id
e1234     23     sur   bab    1344789
e1234     23     sur   bab    1617
e2345     22     nav   kum    52109
e3456     21     ash   kuma   NA
e4567     23     anu   kot    NA
基本上,如果自定义的e_id中存在自定义的NA,我想忽略自定义的NA行,而如果用户在自定义的NA列中只有NA值,我想保留一行,忽略其他行

尝试:

final_output = dataset_A[order(dataset_A$custom_id),]
final_output = final_output[!duplicated(final_output[,c(1:4)]),]

用我上面的代码,我无法从我的数据集中提取几行数据,比如1617自定义id用于e_1234 e_id。如果我们能够找到相同的解决方案,这将非常有用。

我们可以使用
dplyr
中的
slice
e_id
分组,如果
自定义id
的所有
值均为空,则只返回第一行
NA
否则返回所有非NA行,然后应用
distinct
以获得唯一行

library(dplyr)
df %>%
  group_by(e_id) %>%
  slice(if(all(is.na(custom_id))) 1 else which(!is.na(custom_id))) %>%
  distinct()

#   e_id    age fn    ln    custom_id
#  <fct> <int> <fct> <fct>     <int>
#1 e1234    23 sur   bab     1344789
#2 e1234    23 sur   bab        1617
#3 e2345    22 nav   kum       52109
#4 e3456    21 ash   kuma         NA
#5 e4567    23 anu   kot          NA

如果正确理解,您可以按如下方式使用dplyr:

library(dplyr)
data %>% filter (., is.na(custom_id)==FALSE) %>% distinct(.)
如果要保留NAN,可以将If-else添加到slice命令中

Book2 %>%  group_by(., e_id) %>%
  slice(., ifelse(all(is.na(custom_id)), 1 , which(!is.na(custom_id))))
编辑:有人比我快,所以请转到前面的答案

Book2 %>%  group_by(., e_id) %>%
  slice(., ifelse(all(is.na(custom_id)), 1 , which(!is.na(custom_id))))