【问题标题】:How to use grepl() in loop for values >= x?如何在值> = x的循环中使用grepl()?
【发布时间】:2013-04-25 07:11:11
【问题描述】:

我是 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 时它工作正常,但 >= 似乎不起作用。 有谁知道为什么?

【问题讨论】:

  • 欢迎来到 SO 和R 社区!由于您是新来的,您可能会发现阅读the aboutfaq 了解 SO 如何充分利用该网站很有用。

标签: r


【解决方案1】:

ifelse 在这种情况下似乎很合适:

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

这会将NA 赋予不是&gt;= 到1.2 的值。在您的示例中,df$V2 中的 all 值大于或等于 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"

【讨论】:

  • 那么this answer 完全正确吗?这里V4 的列是字符类型,但我们仍然在 NA 周围得到尖括号。
猜你喜欢
  • 2022-01-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-01-10
  • 1970-01-01
  • 2016-02-15
  • 1970-01-01
相关资源
最近更新 更多