检查R中的值是否为数字

时间:2016-03-19 13:38:19

标签: r

我有两个数据帧,df1和df2。

DF1:

col1 <- c('30','30','30','30')
col2 <- c(3,13,18,41)
col3 <- c("heavy","light","blue","black")
df1 <- data.frame(col1,col2,col3)

>df1
  col1 col2  col3
1   30    3 heavy
2   30   13 light
3   30   18  blue
4   30   41 black

DF2:

col1 <- c('10',"NONE")
col2 <- c(21,"NONE")
col3 <- c("blue","NONE")
df2 <- data.frame(col1,col2,col3)

>df2
  col1 col2 col3
1   10   21 blue
2 NONE NONE NONE

我写了一些脚本说;如果col3中的值等于“light”,我想删除该行和数据帧中的所有后续行。所以df1看起来像:

  col1 col2  col3
1   30    3 heavy

df2没有变化(因为它与col3中的“light”没有匹配)。

我已经声明上面有两个单独的df作为两个例子,但是下面的脚本只是引用了一个通用的“df”来保存我复制并粘贴相同的代码位两次df1与df2重新复制。

phrase=c("light")
start_rownum=which(grepl(phrase, df[,3]))
end_rownum=nrow(df)
end_rownum=as.numeric(end_rownum)
if(start_rownum > 0){
   df=df[-c(start_rownum:end_rownum),]
}

此脚本适用于df1,因为start_rownum具有数值。但是,我在df2中遇到以下错误:

Error in start_rownum:end_rownum : argument of length 0

而不是说“if(start_rownum&gt; 0)”,有没有办法检查start_rownum是否有数值?我找不到合适的解决方案。

感谢。

1 个答案:

答案 0 :(得分:2)

对于有类似问题的人,我刚刚解决了这个问题:

使用短语

if (length(start_rownum)>0 & is.numeric(start_rownum))