如何将行保存在多列中的任何一列中

时间:2017-03-13 13:20:22

标签: r

我希望将行保留在列名称所包含的任何列的位置' NonAcid'是> 50

我的数据集:

    structure(list(RSAPNonAcidStomach = c(NA, 50, 0, 0), RSAPNonAcidThroat = c(NA, 
NA, NA, 0), RSAPNonAcidDysphagia = c(100, 0, 0, 0), RSAPAcidThroat = c(NA, 
NA, 75, NA)), .Names = c("RSAPNonAcidStomach", "RSAPNonAcidThroat", 
"RSAPNonAcidDysphagia", "RSAPAcidThroat"), row.names = c(NA, 
-4L), class = "data.frame")

输出:

RSAPNonAcidStomach RSAPNonAcidThroat RSAPNonAcidDysphagia RSAPAcidThroat
    NA                 NA             100                  NA
    50                 NA               0                  NA

我试过了:

dfwNon<-df[which(apply,df[grepl(".*RSAPNonAcid.*",names(df))],1,max)>50,]

但它告诉我我有一个未使用的参数max

3 个答案:

答案 0 :(得分:1)

这是一种矢量化方式。 df[grepl('NonAcid', names(df))] >= 50的一部分创建了一个逻辑矩阵,其中包含感兴趣的列,其值为&gt; = 50.然后我们使用rowSums,如果它大于0则表示特定行有至少1个值50或更大。我们用它来索引数据框。

df[rowSums(df[grepl('NonAcid', names(df))] >= 50, na.rm = TRUE) >0, ]

#  RSAPNonAcidStomach RSAPNonAcidThroat RSAPNonAcidDysphagia RSAPAcidThroat
#1                 NA                NA                  100             NA
#2                 50                NA                    0             NA

答案 1 :(得分:1)

更接近原始方法,这应该修复您的代码:

dfwNon<-df[apply(df[,which(grepl("RSAPNonAcid",names(df)))],1,max, na.rm=TRUE)>50,]

答案 2 :(得分:0)

我们可以使用grepl以“NonAcid”获取数据的列索引,然后使用apply逐行margin=1我们的搜索条件(任意值&gt; = 50)。当我们使用na.rm=TRUE时,它返回一个Logical TRUE / FALSE向量,可用于索引数据。

dat[apply(dat[,grepl("NonAcid",names(dat),fixed=TRUE)],1,function(x) any(x>=50,na.rm=TRUE)),]