【发布时间】:2018-12-02 19:22:36
【问题描述】:
我有一个字符变量数据集:
col1 = c("a","b","c")
col2 = c("a","b_a","d")
df = data.frame(col1,col2)
col1 col2
1 a a
2 b b_a
3 c d
如果该行中的任何值包含子字符串“a”,我想创建一个标记 1,0 的变量 a。
col1 col2 a
1 a a 1
2 b b_a 1
3 c d 0
我的尝试如下。它并没有完全做到这一点,因为我相信如果数据框中的任何值包含子字符串而不是行,它需要TRUE。
df["a"] = ifelse(any(sapply(df,function(x) str_detect(x,"a")),TRUE),1,0)
我的想法是,对于 ifelse 语句,ifelse 语句中的任何函数只评估 df[i,] 而不是整个数据框,其中 i 是它正在查看的行。情况似乎并非如此。
1) 如何构建我正在寻找的数据框?请注意,在我的真实数据集中,有 100 多列,因此将它们全部列出是没有意义的。
2) 为什么 ifelse 不只计算 df 的行 i,而不是整个 df?
请注意,以前的问题只看at one variable,我正在查看所有变量,所以这不是重复的。
【问题讨论】:
-
@A.Suliman 我不这么认为。您引用的帖子仅搜索 1 个变量。我正在寻找行中的所有变量。在我发布的示例中,我正在对 col1 和 col2 进行子字符串搜索。另外,我正在寻求帮助来理解 ifelse 的底层逻辑。
标签: r