我正在尝试创建一个新变量,该变量仅在满足特定条件时才打印一系列列的第一个值。
为了澄清,我的数据库看起来像这样:
我想创建一个变量(main),仅当值不是以C00到C99开头时,才打印第一个var列中的值。如果值确实以该条件开头,那么我想在下一列测试该条件,直到满足条件并打印该值。
因此,对于上表,新创建的变量(main)应如下所示:
我不太确定从哪里开始,但我怀疑这可能涉及突变()和ifelse()
这将创建一个列,其中存储了所有不满足条件的值:来自akrun的数据:
library(tidyverse)
df1 %>%
mutate(across(var1:var4, ~case_when(str_detect(., "^C\\d+") ~ "",
TRUE ~ .), .names = 'new_{col}')) %>%
unite(New_Col, starts_with('new'), na.rm = TRUE, sep = ' ')
var1 var2 var3 var4 New_Col
1 C7931 C3490 R0781 I10 R0781 I10
2 R079 R0600 I10 C3490 R079 R0600 I10
3 S270XXA S225XXA C3490 C7931 S270XXA S225XXA
我们可以使用grepl
通过在每一行上循环来创建用于子集的逻辑向量。匹配的模式是C
,后跟一个或多个数字(\\d
),对逻辑向量求反(
df1$main <- apply(df1[startsWith(names(df1), "var")], 1,
function(x) x[!grepl("^C\\d+", x)][1])
与
整洁,
可以使用行
与str_subset
library(dplyr)
library(stringr)
df1 %>%
rowwise %>%
mutate(main = first(str_subset(c_across(starts_with("var")),
regex("^C\\d+"), negate = TRUE))) %>%
ungroup
# A tibble: 3 × 5
var1 var2 var3 var4 main
<chr> <chr> <chr> <chr> <chr>
1 C7931 C3490 R0781 I10 R0781
2 R079 R0600 I10 C3490 R079
3 S270XXA S225XXA C3490 C7931 S270XXA
df1 <- structure(list(var1 = c("C7931", "R079", "S270XXA"), var2 = c("C3490",
"R0600", "S225XXA"), var3 = c("R0781", "I10", "C3490"), var4 = c("I10",
"C3490", "C7931")), class = "data.frame", row.names = c(NA, -3L
))
我需要帮助完成一项看似简单的任务。我想基于< code>dplyr::mutate中的一个条件创建几个新变量。我可以使用< code>ifelse创建一个新变量,但是我想一步创建几个。 让我们假设这是我的数据帧。 我想要这样的东西: 因此,if条件应该基于条件< code>y创建三个新变量 我想与< code>if_else和< code>case_when一起使用。 谢谢转发
嗨,我想通过使用mutate函数来创建一个新变量Foldchange。但是我想使用来自同一列的值来计算这个值。有没有什么方法可以计算一个新变量,从同一列中折叠更改,而无需重新排列表格,这样表格就不需要拆分了? 下面是一个清晰的例子: 我想要的输出类似于使用: 获取 显然,我不能使用此代码基于V1和V2变量进行选择,但这只是为了说明。我希望通过这种方式,我可以保持我的附加表的完整性,折叠更改将具有重
可能重复: Java中的动态变量名: 假设我有一个字符串,如下所示。 现在,我想创建一个字符串,但是字符串的变量将被称为“Hello”。为了使字符串名为“Hello”,我必须访问string以获取名称“Hello”,这样我就可以将其用作变量名。下面是我想看的。 感谢您的努力,请尝试向我解释,因为我是Java初学者D
我是R的新手,这是我关于堆栈溢出的第一个问题。 我正在努力 要通过引用指定新列,请执行以下操作: 对于每行 使用同一行组中第一行到下一行的值。 这符合一个条件 示例数据: 我想做的是 子集(组)按 对于每行 查找进一步向下的第一行的, 其中,和(找到的行)大于我正在更新的行的 我的预期结果是: 我使用<code>尝试了许多变体。SD,,创建一个新的列,其中包含但实际上没有得到任何结果。非常感谢任何
我有这个数据 如果M3大于UCL,MM3将为“UP”,否则为“NULL” 但是我有几个M列(比如m1~m1005),所以我想做一些代码,比如mutate_each和mutate_at。如何使用mutate和ifelse函数在特定条件下创建新列?