如何在循环中使用grepl()获取值> = x?

时间:2013-05-01 09:16:23

标签: r

我是R的全新人,有以下问题: 我想用字母A创建一个新的列V4,只有V2中的IF值大于或等于1.2

这是我的测试数据框df:

    V1  V2  V3
1   ABC 1.2 4.3
2   CFS 2.3 1.7
3   dgf 1.3 4.4

这就是我做的事情

df$V4<-NA

for(i in 1:nrow(df)) {   
 xy=df[i,]$V2   
 if (grepl(>=1.2,xy)) 
 df[i,]$V4 ="A"      
}  
}

当我只想要1.2时,它工作正常,但&gt; =似乎不起作用。 谁知道为什么?

1 个答案:

答案 0 :(得分:3)

在这种情况下,ifelse似乎是合适的:

df$V4 <- ifelse( df$V2 >= 1.2 , "A" , NA )

这会将NA赋予非>=到1.2的值。在您的示例 df$V2中的所有值都大于或等于1.2,因此您得到:

 df
#   V1  V2  V3 V4
#1 ABC 1.2 4.3  A
#2 CFS 2.3 1.7  A
#3 dgf 1.3 4.4  A

但是,如果我们制作的值小于1.2 ......

df
#   V1  V2  V3
#1 ABC 1.2 4.3
#2 CFS 2.3 1.7
#3 dgf 1.0 4.4

df$V4 <- ifelse( df$V2 >= 1.2 , "A" , NA )
df
#   V1  V2  V3   V4
#1 ABC 1.2 4.3    A
#2 CFS 2.3 1.7    A
#3 dgf 1.0 4.4 <NA>

NA由有角度的大括号包围,表示它实际上是NA(缺失值等),而不是字符串'NA'

如果数据集中有大量行,那么比较和替换子集方法可能会更快:

 df$V4 <- NA
 df$V4[ df$V2 >= 1.2 ] <- "A"