我是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; =似乎不起作用。 谁知道为什么?
答案 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"