如何在 R 中跨多列应用 ifelse 函数并创建新列

2023-12-05

我想在数据集的多个列上应用 ifelse 函数并创建新的“重新评分”列。这是一个示例数据集:

data = data.frame(year = "2021",
                  month = sample(x = c(1:12), size = 10, replace = TRUE),
                  C1 = sample(x = c('Off', 'Yes'), size = 10, replace = TRUE),
                  C2 = sample(x = c('Off', 'Yes'), size = 10, replace = TRUE),
                  C3 = sample(x = c('Off', 'Yes'), size = 10, replace = TRUE),
                  C4 = sample(x = c('Off', 'Yes'), size = 10, replace = TRUE),
                  C5 = sample(x = c('Off', 'Yes'), size = 10, replace = TRUE),
                  C6 = sample(x = c('Off', 'Yes'), size = 10, replace = TRUE),
                  C7 = sample(x = c('Off', 'Yes'), size = 10, replace = TRUE),
                  C8 = sample(x = c('Off', 'Yes'), size = 10, replace = TRUE),
                  C9 = sample(x = c('Off', 'Yes'), size = 10, replace = TRUE),
                  C10 = sample(x = c('Off', 'Yes'), size = 10, replace = TRUE))

我想在以 C 开头的所有行中应用这样的函数:

rescored = data %>%
  mutate(T1 = ifelse(C1 == "Off", 1,
                     ifelse(C1 == "Yes", 0, NA)))

我的真实数据集有 50 行或更多行需要应用此函数。有没有一种简单的方法可以做到这一点?我尝试过在 dplyr 中使用“across”的变体,如下所示,但没有成功。我确信还有一个“应用”选项。

rescored = data %>%
  mutate(across(C1:C50, ifelse(~ .x == "Off", 1,
                               ifelse(~.x == "Yes", 0, NA))))

只需执行此操作(您必须使用twiddle ~在函数语句的开头而不是在每个参数之前。)

data %>%
  mutate(across(starts_with('C'), ~ifelse( .x == "Off", 1,
                               ifelse(.x == "Yes", 0, NA))))

   year month C1 C2 C3 C4 C5 C6 C7 C8 C9 C10
1  2021     1  1  0  0  1  1  0  0  1  1   1
2  2021    12  1  1  0  0  1  1  1  0  1   0
3  2021    10  1  0  1  0  0  1  0  0  1   1
4  2021     3  0  1  1  1  0  1  0  0  0   1
5  2021    11  1  0  1  1  1  0  1  0  0   0
6  2021    12  1  0  0  1  1  1  0  0  1   0
7  2021     4  0  0  0  1  1  0  1  0  1   0
8  2021     2  0  0  0  1  0  0  0  0  1   0
9  2021     3  0  0  1  0  0  1  0  0  1   0
10 2021     9  1  0  0  0  0  0  1  0  0   0

或者也许这样,如果你想保留原始列


data %>%
  mutate(across(starts_with('C'), ~ifelse( .x == "Off", 1, 0), .names = 'scr_{sub("C", "", .col)}'))
#>    year month  C1  C2  C3  C4  C5  C6  C7  C8  C9 C10 scr_1 scr_2 scr_3 scr_4
#> 1  2021     7 Yes Yes Yes Off Yes Off Off Yes Yes Yes     0     0     0     1
#> 2  2021    11 Off Yes Yes Yes Yes Yes Off Yes Yes Yes     1     0     0     0
#> 3  2021     1 Yes Yes Off Off Yes Yes Yes Off Yes Yes     0     0     1     1
#> 4  2021     5 Yes Off Off Yes Yes Yes Yes Off Yes Yes     0     1     1     0
#> 5  2021     6 Off Off Yes Yes Off Off Off Yes Off Yes     1     1     0     0
#> 6  2021    12 Yes Yes Yes Off Off Yes Yes Yes Off Yes     0     0     0     1
#> 7  2021     1 Off Off Off Off Yes Off Off Off Yes Yes     1     1     1     1
#> 8  2021     1 Yes Yes Yes Off Off Yes Yes Off Off Yes     0     0     0     1
#> 9  2021     8 Off Yes Off Yes Off Off Yes Yes Yes Yes     1     0     1     0
#> 10 2021    10 Off Yes Off Yes Yes Off Off Yes Off Off     1     0     1     0
#>    scr_5 scr_6 scr_7 scr_8 scr_9 scr_10
#> 1      0     1     1     0     0      0
#> 2      0     0     1     0     0      0
#> 3      0     0     0     1     0      0
#> 4      0     0     0     1     0      0
#> 5      1     1     1     0     1      0
#> 6      1     0     0     0     1      0
#> 7      0     1     1     1     0      0
#> 8      1     0     0     1     1      0
#> 9      1     1     0     0     0      0
#> 10     0     1     1     0     1      1

Created on 2021-05-15 by the reprex package (v2.0.0)

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在 R 中跨多列应用 ifelse 函数并创建新列 的相关文章

  • 将 Instagram/youtube 嵌入 Shiny R 应用程序

    我想通过点击图表来播放 Instagram 或 Youtube 视频 例如显示异常值等 到目前为止 明确告诉 Shiny 视频内容是有效的 require shiny require ggplot2 data df lt data fram
  • kableExtra 中的 row_spec() 函数不会在 html 输出中创建水平线

    我想在 kableextra 表中的某一行下方添加一条水平线 row spec 函数的参数 hline after 应该在行下方添加水平线 row spec 文档 https www rdocumentation org packages
  • 使用 broom 和 tidyverse 总结 r 平方游戏

    我发布了一个问题here https stackoverflow com questions 48627287 getting adjusted r squared value for each line in a geom smooth
  • 删除ggplot2中的负图区域[重复]

    这个问题在这里已经有答案了 如何删除 ggplot2 中 x 轴和 y 轴下方的绘图区域 请参见下面的示例 我尝试了几个主题元素 panel border panel margin plot margin 但没有任何运气 p lt ggpl
  • 如何从 Fortran 调用 R 函数?

    根据http gallery rcpp org articles r function from c http gallery rcpp org articles r function from c Rcpp 允许用户从 C 调用 R 函数
  • R中的一元加/减是什么?

    来自 R 的详细信息部分Syntax http stat ethz ch R manual R patched library base html Syntax html帮助页面 定义了以下一元和二元运算符 他们被列出 在优先级组中 从最高
  • R - Plm 和 lm - 固定效应

    我有一个平衡面板数据集 df 本质上由三个变量组成 A B and Y 对于一堆独特识别的区域来说 它会随着时间的推移而变化 我想运行一个回归 其中包括区域 下面等式中的区域 和时间 年份 固定效应 如果我没记错的话 我可以通过不同的方式来
  • 如何计算R中移动窗口内的平均斜率

    我的数据集包含2个变量y 和 t 05s y 每 05 秒测量一次 我正在尝试计算移动中的平均坡度20秒窗口 即计算第一个 20 秒斜率值后 窗口向前移动一个时间单位 05 秒 并计算下一个 20 秒窗口 在以下位置生成连续 20 秒斜率值
  • 如何为键盘上的 xml 中的功能键设置不同的背景?

    我正在开发 Android 键盘应用程序 我尝试为普通键和功能键设置不同的背景 但它不起作用
  • 将数据框中的每个 x 个字符拆分为字符串

    我知道这里有一些关于每隔一段时间分割一个字符串的答案nth字符 例如this one https stackoverflow com questions 23208490 split each character in r and this
  • kernlab 中 SVM 训练之外的核矩阵计算

    我正在开发一种新算法 该算法可以生成修改后的核矩阵以用于 SVM 训练 但遇到了一个奇怪的问题 出于测试目的 我比较了使用 kernelMatrix 接口和普通内核接口学习的 SVM 模型 例如 Model with kernelMatri
  • Dendextend:关于如何根据定义的组为树状图的标签着色

    我正在尝试使用一个名为 dendextend 的很棒的 R 包来绘制树状图并根据一组先前定义的组为其分支和标签着色 我已阅读您在 Stack Overflow 中的答案以及 dendextend vignette 的常见问题解答 但我仍然不
  • 从命令行运行 R 代码 (Windows)

    我在名为 analysis r 的文件中有一些 R 代码 我希望能够从命令行 CMD 运行该文件中的代码 而无需通过 R 终端 并且我还希望能够传递参数并在我的代码中使用这些参数 例如就像下面的伪代码 C gt execute r scri
  • R独特的列或行与NA无可比拟

    有谁知道如果incomparables的论证unique or duplicated 曾经被实施过incomparables FALSE 也许我不明白它应该如何工作 无论如何 我正在寻找一个巧妙的解决方案 以仅保留与另一列相同的唯一列 或行
  • 在 R 格子包中微调点图

    我正在尝试为不同的数据集和不同的算法绘制一堆 ROC 区域 我有三个变量 方案 指定所使用的算法 数据集 是正在测试算法的数据集 以及 Area under ROC 我正在 R 中使用lattice库 命令如下 点图 方案 Area und
  • r 中训练和测试数据的最小最大缩放/归一化

    我正在创建一个函数 它将训练集和测试集作为其参数 最小 最大缩放 标准化并返回训练集并使用这些same最小值和最小 最大范围的值 标准化并返回测试集 到目前为止 这是我想出的功能 min max scaling lt function tr
  • 在 R 中使用 lapply 绘制多个数据帧

    我正在尝试使用 lapply 函数绘制多个数据帧 每个数据帧一个图 但是尽管有关此主题的所有帖子我都找不到答案 因为我不断收到错误 图的输出列表为空 我的数据结构如下 df1 lt mtcars gt group by cyl gt tal
  • 朴素贝叶斯分类器仅基于先验概率做出决策

    我试图根据推文的情绪将推文分为三类 买入 持有 卖出 我正在使用 R 和包 e1071 我有两个数据框 一个训练集和一组需要预测情绪的新推文 训练集数据框 text sentiment this stock is a good buy Bu
  • 文本挖掘 pdf 文件/词频问题

    我正在尝试挖掘一篇具有丰富 pdf 编码和图表的文章的 pdf 我注意到 当我挖掘一些 pdf 文档时 我得到的高频词是 phi taeoe toe sigma gamma 等 它与某些 pdf 文档配合良好 但与其他文档配合使用时却得到这
  • 如何仅删除单括号并保留配对的括号

    你好 我亲爱的老师 R 用户朋友们 我最近开始认真学习正则表达式 最近我遇到了一种情况 我们只想保留配对括号 并省略未配对的 这是我的样本数据 structure list t1 c Book Pg 1 Website Online Jou

随机推荐