我有两个数据帧,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是否有数值?我找不到合适的解决方案。
感谢。
答案 0 :(得分:2)
对于有类似问题的人,我刚刚解决了这个问题:
使用短语
if (length(start_rownum)>0 & is.numeric(start_rownum))