r - 基于R中的条件循环和连接
问题描述
我是 R 新手,但仍在为循环而苦苦挣扎。
我正在尝试创建一个循环,其中基于条件(variable_4 == 1),它将连接 variable_5 的内容,用逗号分隔。
data1 <- data.frame(
ID = c(123:127),
agent_1 = c('James', 'Lucas','Yousef', 'Kyle', 'Marisa'),
agent_2 = c('Sophie', 'Danielle', 'Noah', 'Alex', 'Marcus'),
agent_3 = c('Justine', 'Adrienne', 'Olivia', 'Janice', 'Josephine'),
Flag_1 = c(1,0,1,0,1),
Flag_2 = c(0,1,0,0,1),
Flag_3 = c(1,0,1,0,1)
)
data1$new_var<- ""
for(i in 2:10){
variable_4 <- paste0("flag_", i)
variable_5 <- paste0("agent_", i)
data1 <- data1 %>%
mutate(!! new_var = case_when(variable_4 == 1,paste(new_var, variable_5, sep=",")))
}
我在上一步中创建了 new_var,因为代码给了我一个错误,即找不到变量。理想情况下,循环将累积 variable_5 的内容,只有当 variable_4 等于 1 并且结果将是大字符串,用逗号分隔。
该循环将仅将标志为 = 1 的代理的名称粘贴到新变量中。如果 Flag_1=1,则将代理的名称粘贴到 new_var 中,如果不是,则忽略。如果flag_2 =1,则连接新var中的agent名称,用逗号分隔,如果不是,则忽略...
解决方案
在 BaseR 或 tidyverse 或两者的组合中,有几种不同的方法可以做到这一点,如果你坚持使用 tidyverse,那么考虑一下:
我已使用 mtcars 作为您的数据框!
#load dplyr or tidyverse
library(tidyverse)
# create data as mtcars
df <- mtcars
# create two new columns flag and agent as rownumbers
df <- df %>%
mutate(flag = paste0("flag", row_number())) %>%
mutate(agent = paste0("agent", row_number()))
# using case when in mutate statement
df2 <- df %>%
mutate(new_column = ifelse(flag == "flag1", yes = paste0(agent, " this is a new variable"), no = flag))
print(df2)
如果您有一个案例,则 ifelse 语句可能更合适 - 但如果您有很多案例,请case_when
改用。
推荐阅读
- swift - 如何访问 SpriteKit 场景编辑器参考节点上自定义类中包含的 Swift 中的变量?
- bitbucket - Bitbucket 迁移主目录并无法启动
- javascript - 数字零在javascript中作为“”工作吗?
- javascript - 在 Vuejs 中使用 indexOf 方法
- kubernetes - 使用 Ingress 返回 404 将 Kubernetes Dashboard 暴露给外部
- c# - 应用程序处于中断模式,aspnet核心
- jquery - 通过 AJAX 将数据传递给 Laravel 控制器
- python - 从 google.cloud 导入 firestore ModuleNotFoundError:没有名为“google”的模块
- ruby-on-rails - 如何以有效的方式更改数组中的值
- android - 如何在图像视图上的随机位置传递许多文本视图?