首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >只保留不完整的级别,基于两列

只保留不完整的级别,基于两列
EN

Stack Overflow用户
提问于 2018-11-15 11:28:47
回答 2查看 43关注 0票数 0

在以下方面,我确实需要一些帮助:

I一些样本数据:

代码语言:javascript
复制
Group<-c("A","A","B","B","C","C","D", "D")
Value1<-c("7","1",8,7,"NA",9,10,12)
Value2<-c("NA","NA","NA",7,3,9,7,4)
df<-data.frame(Group, Value1, Value2)

  Group Value1 Value2
     A      7     NA
     A      1     NA
     B      8     NA
     B      7      7
     C     NA      3
     C      9      9
     D     10      7
     D     12      4

我希望删除为Value1和Value2完全填充的所有组(如D组),或者删除组内没有Value2数据的组(如A组)。因此,我最终得到了为Value1和Value2填充但不完整的组,例如:

代码语言:javascript
复制
  Group Value1 Value2
     B      8     NA
     B      7      7
     C     NA      3
     C      9      9

我知道如何删除NA,而且我尝试了一些东西

代码语言:javascript
复制
setDT()[,  := if(any(Value2==)) "" else "" , by = .()]

但我现在不知道如何在这种情况下使用它..。

有人知道我该怎么做吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-11-15 11:51:19

类似于:

代码语言:javascript
复制
setDT(df)[, .SD[!all(is.na(Value2)) & (anyNA(Value1) | anyNA(Value2))], Group]

输出:

代码语言:javascript
复制
   Group Value1 Value2
1:     B      8     NA
2:     B      7      7
3:     C   <NA>      3
4:     C      9      9

请注意,为了使其工作,您的值实际上应该是NA,而不仅仅是"NA"作为字符串,也就是说,它与一个修改过的dataframe示例一起工作:

代码语言:javascript
复制
Group<-c("A","A","B","B","C","C","D", "D")
Value1<-c("7","1",8,7,NA,9,10,12)
Value2<-c(NA,NA,NA,7,3,9,7,4)
df<-data.frame(Group, Value1, Value2)
票数 1
EN

Stack Overflow用户

发布于 2018-11-15 12:10:23

使用@arg0non中的数据(将NA保持为NA而不是"NA")使用两个ave的基本R解决方案将是

代码语言:javascript
复制
df[!with(df, ave(complete.cases(df), Group, FUN = all) | 
             ave(is.na(Value2), Group, FUN = all)), ]

#  Group Value1 Value2
#3     B      8     NA
#4     B      7      7
#5     C     NA      3
#6     C      9      9

我们分别保留两个条件,找出我们不想选择的行,然后取它的否定。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53318467

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档