在以下方面,我确实需要一些帮助:
I一些样本数据:
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填充但不完整的组,例如:
Group Value1 Value2
B 8 NA
B 7 7
C NA 3
C 9 9我知道如何删除NA,而且我尝试了一些东西
setDT()[, := if(any(Value2==)) "" else "" , by = .()]但我现在不知道如何在这种情况下使用它..。
有人知道我该怎么做吗?
发布于 2018-11-15 11:51:19
类似于:
setDT(df)[, .SD[!all(is.na(Value2)) & (anyNA(Value1) | anyNA(Value2))], Group]输出:
Group Value1 Value2
1: B 8 NA
2: B 7 7
3: C <NA> 3
4: C 9 9请注意,为了使其工作,您的值实际上应该是NA,而不仅仅是"NA"作为字符串,也就是说,它与一个修改过的dataframe示例一起工作:
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)发布于 2018-11-15 12:10:23
使用@arg0non中的数据(将NA保持为NA而不是"NA")使用两个ave的基本R解决方案将是
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我们分别保留两个条件,找出我们不想选择的行,然后取它的否定。
https://stackoverflow.com/questions/53318467
复制相似问题