R获取所有值均为NaN的行

R获取所有值均为NaN的行,r,filter,R,Filter,我试图获取所有特定值(这里是RATIO1和ratio2)所在的行,并保留它们 考虑像这样的数据帧 data.frame(ID=c(1,2,4,6,7),RATIO1=c(NaN,NaN,0.2,9.5,6), RATIO2=c(NaN,NaN,0.5,NaN,6), RATIO3=c(0.3,0.2,4,NaN,5)) ID RATIO1 RATIO2 RATIO3 1 1 NaN NaN 0.3 2 2 NaN NaN 0.2

我试图获取所有特定值(这里是RATIO1和ratio2)所在的行,并保留它们

考虑像这样的数据帧

data.frame(ID=c(1,2,4,6,7),RATIO1=c(NaN,NaN,0.2,9.5,6), 
           RATIO2=c(NaN,NaN,0.5,NaN,6), RATIO3=c(0.3,0.2,4,NaN,5))

 ID RATIO1 RATIO2 RATIO3
1  1    NaN    NaN    0.3
2  2    NaN    NaN    0.2
3  4    0.2    0.5      4
4  6    9.5    NaN    NaN
5  7      6      6      5
我希望它看起来像这样

 ID RATIO1 RATIO2 RATIO3
1  1    NaN    NaN    0.3
2  2    NaN    NaN    0.2

我可以使用is.na()或complete.cases()这里有一种可能性,使用一次检查一行,并确定它们是否完全由
NaN
s组成:

df[apply(df[2:3], 1, function(X) all(is.nan(X))),]
#   ID RATIO1 RATIO2 RATIO3
# 1  1    NaN    NaN    0.3
# 2  2    NaN    NaN    0.2

假设您确实在处理
NaN
而不是任意字符值,请尝试以下操作:

dat <- data.frame(ID=c(1,2,4,6,7),RATIO1=c(NaN,NaN,0.2,9.5,6), RATIO2=c(NaN,NaN,0.5,NaN,6), RATIO3=c(0.3,0.2,4,NaN,5))
> dat[is.nan(dat$RATIO1) & is.nan(dat$RATIO2),]
  ID RATIO1 RATIO2 RATIO3
1  1    NaN    NaN    0.3
2  2    NaN    NaN    0.2
dat-dat[is.nan(dat$RATIO1)和is.nan(dat$RATIO2),]
ID比率1比率2比率3
1楠楠0.3
2楠楠0.2
是有限的。
如果你经常做这类事情,可能也会很有用。

你可以用这个:

df <- data.frame(ID=c(1,2,4,6,7),RATIO1=c(NaN,NaN,0.2,9.5,6), 
                   RATIO2=c(NaN,NaN,0.5,NaN,6), RATIO3=c(0.3,0.2,4,NaN,5))

df[is.nan(df$RATIO1) & is.nan(df$RATIO2),]

  ID RATIO1 RATIO2 RATIO3
1  1    NaN    NaN    0.3
2  2    NaN    NaN    0.2

df基于Josh O'Briens的改进解决方案

df[rowSums(is.nan(as.matrix(df[2:3])))>1,]
#
# as.matrix because is.nan requires matrix  (but is.na doesn't)
# rowSums for speed gain
#

假设:比率来自特定的原点,我想得到特定于原点的“行”,例如ratio3->ratio2和比率1应该是NaN(例如,在示例中未找到),好吧,但您确实意识到您在这里强制所有内容为字符(或因子),对吗?是的,很抱歉,很快就搞错了。有什么想法吗?:)但这将在第2列和第3列中保留包含
NA
s(而不仅仅是
NaN
s)的行……你说得对!我错过了这一点,也没有正确地将data.frame子集化。。。我已经更新了我的答案,这与下面joran的答案没有什么不同。我喜欢这是一个解决方案,它不局限于特定的专栏。