3

我是 R 的新手并且有以下问题:我想创建一个新的列 V4 与字母 A 只有如果 V2 中的值大于或等于 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 时它工作正常,但 >= 似乎不起作用。有谁知道为什么?

4

1 回答 1

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"
于 2013-05-01T09:19:07.170 回答