【发布时间】:2019-11-26 17:09:42
【问题描述】:
我是 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名称,用逗号分隔,如果不是,则忽略...
【问题讨论】:
-
我认为您需要更清楚地了解您要测试的条件。您是否尝试测试迭代值 i == 1 然后在 new_var 中创建串联,因为 variable_4 将始终属于“flag_1”、“flag_2”等类型 - 它不会像 1,2 那样本身是一个数字,3 等
-
如果您创建一些示例数据(未给出
data1)并尝试获得所需的输出,您的问题会更加清晰 -
嗨,如果我的问题不够清楚,我很抱歉。我有一个称为代理的变量。假设变量的内容是agent_1,agent_2,agent_3,agent_4...agent_10。假设标志(变量 4 )仅对 agent_1、agent_4、agent_7 等于 1。该循环会将代理变量的内容保存在 new_var 中,例如该行的 new_var ="agent_1,agent_4, agent_7"。不会添加其他代理,因为标志不是 1。这有意义吗?
-
我添加了一张图片,希望对您有帮助?
-
是的,这张图片现在让你的预期输出清晰了。我将编辑以添加
data1的数据,以使您的示例可重现。
标签: r loops string-concatenation