r - 测试数据帧列是否包含任何矢量元素



我有以下数据帧,df:

Alpha      Beta     Gamma
1     100       36      Dollar, Euro, Yen
2     120      -33      Euro
3     150       14      Yen, Peso

我有另一个向量,货币 = c("美元"、"日元")

我想生成一个新列,其中列出了:

  • 如果"Gamma"包含任何货币元素,则为 1
  • 如果"Gamma"不包含货币元素,则为 0

我尝试:

df$Epsilon <- ifelse(any(df$Gamma %in% currency), 1, 0)

但这行不通。 经过仔细检查,df$Gamma 中的每一行都被解释为一个字符串(即,"美元、欧元、日元"而不是"美元"、"欧元"、"日元"),因此 %in% 无法正常工作。

splits = lapply(strsplit(df$Gamma,','), trimws)

完成分解值的工作,但我只能通过使用双括号(即 splits[[i]]])引用它们以与 %in% 进行比较,我无法对列表中的每个值都这样做。

我怎样才能达到我的结果?

transform(dat,yy=grepl(paste0(currencies,collapse="|"),Gamma)+0)
Alpha Beta             Gamma yy
1   100   36 Dollar, Euro, Yen  1
2   120  -33              Euro  0
3   150   14         Yen, Peso  1

使用stringr::str_detect可以实现一种解决方案,如下所示:

library(stringr)
df$Epsilon <- as.numeric(str_detect(df$Gamma, paste(currencies, collapse='|')))
df
#   Alpha Beta             Gamma Epsilon
# 1   100   36 Dollar, Euro, Yen       1
# 2   120  -33              Euro       0
# 3   150   14         Yen, Peso       1

数据:

df <- read.table(text = 
'Alpha      Beta     Gamma
100       36      "Dollar, Euro, Yen"
120      -33      Euro
150       14      "Yen, Peso"',
header = TRUE, stringsAsFactors = FALSE)
currencies = c("Dollar", "Yen")

相关内容

  • 没有找到相关文章

最新更新