【发布时间】:2018-04-08 20:57:23
【问题描述】:
我有以下数据框,df:
Alpha Beta Gamma
1 100 36 Dollar, Euro, Yen
2 120 -33 Euro
3 150 14 Yen, Peso
我还有另一个向量,currency = c("Dollar", "Yen")
我想生成一个新列,列出:
- 1 如果“Gamma”包含货币的任何元素
- 如果“Gamma”不包含货币元素,则为 0
我试试:
df$Epsilon <- ifelse(any(df$Gamma %in% currency), 1, 0)
但这不起作用。仔细检查后,df$Gamma 中的每一行都被解释为 一个 字符串,(即“Dollar, Euro, Yen”而不是“Dollar”、“Euro”、“Yen”),所以 % in% 无法正常工作。
splits = lapply(strsplit(df$Gamma,','), trimws)
确实可以分解值,但我只能通过使用双括号(即 splits[[i]]])来引用它们以与 %in% 进行比较,而我不能对 in 中的每个值都这样做列表。
我怎样才能达到我的效果?
【问题讨论】:
-
我认为
strsplit选项将是最安全的,以防一种货币包含在另一种货币中,例如“dollar”和“dolarydoos”(官方澳元)。 -sapply(strsplit(df$Gamma, ",\\s+"), function(x) any(currencies %in% x))或类似的。