我希望将行保留在列名称所包含的任何列的位置' 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
答案 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)),]