如何在R中编写这个if else子句?

时间:2015-01-31 06:16:00

标签: r

我有一个输出包含字符串的列表的函数。现在,我想检查这个列表是否包含全部为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?中做到这一点?

谢谢!

2 个答案:

答案 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))))