Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/82.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中的数据框中有重复的值和ID,如何删除整行_R_Dplyr_Tidyr - Fatal编程技术网

如果R中的数据框中有重复的值和ID,如何删除整行

如果R中的数据框中有重复的值和ID,如何删除整行,r,dplyr,tidyr,R,Dplyr,Tidyr,你好,我的df看起来像 PID Record date category 123 22-04-1996 2 123 25-02-2000 NA 132 16-06-1994 1 143 25-07-1990 3 154 09-07-1993 1 154 08-08-1998 2 165 23-03-1993 NA 165 15-05-1995 NA 174 30-12-2000 NA 如果类别值在同一PID的任何一行中可用,我想将它们从数据帧中删除 完全是

你好,我的df看起来像

PID Record date category
123 22-04-1996   2
123 25-02-2000   NA
132 16-06-1994   1
143 25-07-1990   3
154 09-07-1993   1
154 08-08-1998   2
165 23-03-1993   NA
165 15-05-1995   NA
174 30-12-2000   NA
如果类别值在同一PID的任何一行中可用,我想将它们从数据帧中删除 完全是

预期产出:

PID Record date category
132 16-06-1994   1
143 25-07-1990   3
165 23-03-1993   NA
165 15-05-1995   NA
174 30-12-2000   NA

提前感谢

这里是一个使用
ave
+
子集的基本R选项

subset(
  df,
  !ave(Negate(is.na)(category),
    PID,
    FUN = function(x) length(x) > 1 & any(x)
  )
)

  PID       date category
3 132 16-06-1994        1
4 143 25-07-1990        3
7 165 23-03-1993       NA
8 165 15-05-1995       NA
9 174 30-12-2000       NA
数据

> dput(df)
structure(list(PID = c(123L, 123L, 132L, 143L, 154L, 154L, 165L, 
165L, 174L), date = c("22-04-1996", "25-02-2000", "16-06-1994",
"25-07-1990", "09-07-1993", "08-08-1998", "23-03-1993", "15-05-1995",
"30-12-2000"), category = c(2L, NA, 1L, 3L, 1L, 2L, NA, NA, NA
)), class = "data.frame", row.names = c(NA, -9L))

使用
{dplyr}
可以按
PID
对数据进行分组,并仅维护具有单个不同值
category
(包括
NA
的组)

库(dplyr)
#> 
#>正在附加包:“dplyr”
#>以下对象已从“package:stats”屏蔽:
#> 
#>滤波器,滞后
#>以下对象已从“package:base”屏蔽:
#> 
#>相交、setdiff、setequal、并集
示例_数据%
带_组(PID、过滤器、n_独立(类别)==1)
#>#tibble:5 x 3
#>PID‘记录日期’类别
#>                
#> 1   132 16-06-1994           1
#> 2   143 25-07-1990           3
#>316523-03-1993北美
#>416515-05-1995北美
#>5174 30-12-2000北美
由(v0.3.0)于2020-09-07创建

devtools::session_info()
#> ─ 会话信息───────────────────────────────────────────────────────────────
#>设定值
#>R版4.0.2版(2020-06-22)
#>操作系统Ubuntu 20.04.1 LTS
#>系统x86_64,linux gnu
#>ui X11
#>语言(英文)
#>核对en_US.UTF-8
#>ctype en_US.UTF-8
#>欧洲/罗马
#>日期2020-09-07
#> 
#> ─ 包装───────────────────────────────────────────────────────────────────
#>包*版本日期库源
#>资产负债表0.2.1 2019-03-21[1]起重机(R 4.0.2)
#>后端口1.1.9 2020-08-24[1]起重机(R 4.0.2)
#>callr 3.4.3 2020-03-28[1]起重机(R 4.0.2)
#>cli 2.0.2 2020-02-28[1]起重机(R 4.0.2)
#>蜡笔1.3.4 2017-09-16[1]克兰(R4.0.2)
#>描述1.2.0 2018-05-01[1]起重机(R 4.0.2)
#>开发工具2.3.1 2020-07-21[1]起重机(R 4.0.2)
#>文摘0.6.25 2020-02-23[1]CRAN(R 4.0.2)
#>dplyr*1.0.2 2020-08-18[1]起重机(R4.0.2)
#>省略号0.3.1 2020-05-15[1]克兰(R 4.0.2)
#>评估0.14 2019-05-28[1]起重机(R 4.0.2)
#>fansi 0.4.1 2020-01-08[1]起重机(R 4.0.2)
#>fs 1.5.0 2020-07-31[1]起重机(R4.0.2)
#>仿制药0.0.2 2018-11-29[1]克兰(R 4.0.2)
#>胶水1.4.2 2020-08-27[1]起重机(R 4.0.2)
#>高0.8 2019-03-20[1]克兰(R4.0.2)
#>htmltools 0.5.0 2020-06-16[1]起重机(R4.0.2)
#>克尼特1.29 2020-06-23[1]克兰(R 4.0.2)
#>生命周期0.2.0 2020-03-06[1]起重机(R 4.0.2)
#>magrittr 1.5 2014-11-22[1]克兰(R 4.0.2)
#>备忘录1.1.0 2017-04-21[1]克兰(R 4.0.2)
#>支柱1.4.6 2020-07-10[1]起重机(R 4.0.2)
#>pkgbuild 1.1.0 2020-07-13[1]起重机(R 4.0.2)
#>pkgconfig 2.0.3 2019-09-22[1]起重机(R 4.0.2)
#>pkgload 1.1.0 2020-05-29[1]起重机(R 4.0.2)
#>prettyunits 1.1.1 2020-01-24[1]起重机(R 4.0.2)
#>processx 3.4.3 2020-07-05[1]起重机(R 4.0.2)
#>ps 1.3.4 2020-08-11[1]起重机(R 4.0.2)
#>purrr 0.3.4 2020-04-17[1]起重机(R 4.0.2)
#>R6 2.4.1 2019-11-12[1]起重机(R4.0.2)
#>遥控器2.2.0 2020-07-21[1]起重机(R4.0.2)
#>rlang 0.4.7 2020-07-09[1]起重机(R 4.0.2)
#>R标记2.3 2020-06-18[1]起重机(R 4.0.2)
#>rprojroot 1.3-2 2018-01-03[1]起重机(R 4.0.2)
#>会议信息1.1.1 2018-11-05[1]CRAN(R 4.0.2)
#>stringi 1.4.6 2020-02-17[1]起重机(R 4.0.2)
#>纵梁1.4.0 2019-02-10[1]起重机(R4.0.2)
#>测试2.3.2 2020-03-02[1]起重机(R 4.0.2)
#>tibble 3.0.3 2020-07-10[1]起重机(R 4.0.2)
#>潮汐选择1.1.0 2020-05-11[1]起重机(R 4.0.2)
#>使用本1.6.1 2020-04-29[1]起重机(R 4.0.2)
#>utf8 1.1.4 2018-05-24[1]起重机(R 4.0.2)
#>vctrs 0.3.4 2020-08-29[1]起重机(R 4.0.2)
#>带R 2.2.0 2020-04-20[1]起重机(R 4.0.2)
#>xfun 0.16 2020-07-24[1]起重机(R 4.0.2)
#>yaml 2.2.1 2020-02-01[1]起重机(R 4.0.2)
#> 
#>[1]/home/cl/R/x86_64-pc-linux-gnu-library/4.0
#>[2]/usr/local/lib/R/site library
#>[3]/usr/lib/R/站点库
#>[4]/usr/lib/R/library

如果换一种方法,删除多次出现的PID值不是更容易吗?如果我理解正确,当is.na(category)时不应该删除行。