我有一个输出包含字符串的列表的函数。现在,我想检查这个列表是否包含全部为0的字符串,或者是否至少有一个字符串不包含所有0(可以更多)。 我有一个大型数据集。我将在数据集的每一行上执行我的函数。现在,
基本上,
for each row of the dataset
mylst <- func(row[i])
if (mylst(contains strings containing all 0's)
process the next row of the dataset
else
execute some other code
现在,我可以对if-else子句进行编码,但是我无法编码我必须检查所有0的列表的部分。我怎么能在R?中做到这一点?
谢谢!
答案 0 :(得分:2)
您可以使用此for
循环:
for (i in seq(nrow(dat))) {
if( !any(grepl("^0+$", dat[i, ])) )
execute some other code
}
其中dat
是数据框的名称。
此处,正则表达式"^0+$"
匹配仅由0
组成的字符串。
答案 1 :(得分:1)
我想建议避免使用显式for-loop的解决方案。
对于给定的数据集df
,可以找到一个逻辑向量来指示全零的行:
all.zeros <- apply(df,1,function(s) all(grepl('^0+$',s))) # grepl() was taken from the Sven's solution
使用此逻辑向量,可以轻松地将df
分组以删除全零行:
df[!all.zeros,]
并将其用于任何后续转换。
<强>&#39;玩具&#39;数据集强>
df <- data.frame(V1=c('00','01','00'),V2=c('000','010','020'))
<强>更新强>
如果您希望先将函数应用于每一行,然后分析生成的字符串,则应略微修改all.zeros
表达式:
all.zeros <- apply(df,1,function(s) all(grepl('^0+$',func(s))))