繁体   English   中英

如何使用 mutate function 从一组具有相似名称的现有列中添加新列

[英]How to add a new column using mutate function from a group of existing columns with similar names

我想根据其他列中的值向我的数据框中添加一列。

这是数据的摘录。

1

在每一行上,如果 4 个 TOPER 列中的任何一个具有以下任何值(92514、92515、92508、92510、92511 或 92512(我希望S_Flag列等于 1,如果不是,则S_Flag值应该为 0。有突出显示正确的数据(第 2、4、6 和 8 号案例)-因此应制作S_Flag 1。已尝试在mutate function 中使用ifelse 。只是不确定如何识别查看 ifelse 中的所有 4 个ifelse列function??? 试过

tt <- mutate(rr, S_Flag = ifelse( any(vars(everything()) %in% toper_vec), 1,0))

其中rr是原始数据框, toper_vec是包含 6 个 TOPER 列值的向量。

希望这是有道理的。 顺便说一句,我正处于学习 R 的早期阶段。 感谢您提供任何帮助。

几个快速修复应该使您的代码工作:(1)使用 rowwise() 和 (2) 使用 cross()。

修改后的代码如下:

tt <- rr %>%
  rowwise() %>%
  mutate(S_Flag = if_else( any(across(everything()) %in% toper_vec), 1,0))

以下内容丰富的帖子中解决了类似的问题: Check row wise if value is present in column and update new column row wise

将该帖子中建议的方法应用于您的直接问题,以下应该有效:

library(tidyverse)

toper_vec <- c(92514, 92515, 92508, 92510, 92511, 92512)

df <- data.frame("CASE" = c(1, 2, 3, 4, 5),
                 "TOPER1" = c(86509, 92514, 87659, 45232, 86509),
                 "TOPER2" = c(12341, 10094, 12341, 92508, 10094),
                 "TOPER3" = c(86509, 67326, 41908, 50567, 50567))


new_df <- df %>%
  rowwise() %>%                                   
  mutate(S_Flag = case_when(TOPER1 %in% toper_vec ~ 1,    
                       TOPER2 %in% toper_vec ~ 1,
                       TOPER3 %in% toper_vec ~ 1, 
                       TRUE               ~ 0))

这是一个替代方案,重用toper_vec中的 toper_vec 和df

df  %>%
  rowwise() %>%
  mutate(s_flag = if_else(any(c_across(starts_with("TOP")) %in% toper_vec), 1, 0))

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM