【问题标题】:How to use grepl with a character vector length greater than one?如何使用字符向量长度大于 1 的 grepl?
【发布时间】:2019-08-18 10:15:59
【问题描述】:

尝试创建一个条件dummy variable (c),将b >= x 转换为c = 1b < x 转换为c = 0

x = 3: 时的示例输出:

a b c
1 1 0
2 3 1
3 4 1
4 2 0
df$c<-ifelse(grepl(b[b <= 3], df$b), as.numeric(1), as.numeric(0))

我尝试过使用上述ifelse() 函数,但grepl 只允许长度为1 的字符:

在 grepl(b[b 1 并且只使用第一个元素)

【问题讨论】:

  • df$c &lt;- as.integer(df$b &gt;= 3) 或更一般的df$c &lt;- as.integer(df$b &gt;= x)

标签: regex grepl rr


【解决方案1】:

我认为您对grepl 以及如何(以及何时)使用正则表达式感到有些困惑。正则表达式用于查找字符串中的模式(例如找出变量b 中的“b”、“d”还是“g”,可以使用grepl("[bdg]", b, ignore.case = TRUE))。如果b 是数字,则使用条件语句(就像你一样)。

基本上你可以使用

df$c <- with(df, ifelse(b <= 3, 1, 0)) 

df$c <- ifelse(df$b <= 3, 1, 0)

或类似地使用变换

df <- transform(df, c = ifelse(b<=3, 1, 0))

混淆可能是您试图找出 ifelse 语句的 which 是 1 还是 0。为此,您可以使用 which

df$c <- 0
df$c[which(b <= 3)] <- 1

【讨论】:

    猜你喜欢
    • 2020-06-06
    • 1970-01-01
    • 2021-07-25
    • 1970-01-01
    • 2020-05-03
    • 1970-01-01
    • 2018-03-02
    • 2019-12-19
    • 1970-01-01
    相关资源
    最近更新 更多