我需要帮助完成一项看似简单的任务。我想基于< code>dplyr::mutate中的一个条件创建几个新变量。我可以使用< code>ifelse创建一个新变量,但是我想一步创建几个。
让我们假设这是我的数据帧。
df_have <- data.frame(id = 1:10, x = 1:2, y = sample(10, replace = T))
我想要这样的东西:
df_want <- mutate(df_have,
if_else(y<3, var1 = x, var2 = y/x, var3 = T))
因此,if条件应该基于条件< code>y创建三个新变量
我想与< code>if_else和< code>case_when一起使用。
谢谢转发
像这样一次创建所有的变量,尽管坦白地说我不推荐这样做!:
func <- function(x,y) {
if(y<3) list("var1"=x,"var2"=y/x,"var3"=T)
else(list("var1"=NA, "var2"=NA, "var3"=NA))
}
df_have %>%
rowwise() %>%
mutate(vars=list(func(x,y))) %>%
unnest_wider(col = vars)
输出:
id x y var1 var2 var3
<int> <int> <int> <int> <dbl> <lgl>
1 1 1 7 NA NA NA
2 2 2 2 2 1 TRUE
3 3 1 5 NA NA NA
4 4 2 3 NA NA NA
5 5 1 1 1 1 TRUE
6 6 2 3 NA NA NA
7 7 1 5 NA NA NA
8 8 2 4 NA NA NA
9 9 1 2 1 2 TRUE
10 10 2 4 NA NA NA
这样做要快得多:
df_have %>%
mutate(
var1=if_else(y<3, x, as.integer(NA)),
var2=if_else(y<3, y/x, as.double(NA)),
var3 =if_else(y<3, T, as.logical(NA))
)
您可以在mutate中为每个新变量单独使用< code>case_when。请注意,所有< code>case_when案例的输出需要是相同的类型,因此< code>NA_??_类型可能需要根据实际数据进行调整。
set.seed(20)
df_have <- data.frame(id = 1:10, x = 1:2, y = sample(10, replace = T))
df_have %>%
dplyr::mutate(
var1 = case_when(y < 3 ~ x,
TRUE ~ NA_integer_),
var2 = case_when(y < 3 ~ y/x,
TRUE ~ NA_real_),
var3 = case_when(y < 3 ~ TRUE,
TRUE ~ FALSE)
)
# id x y var1 var2 var3
#1 1 1 6 NA NA FALSE
#2 2 2 8 NA NA FALSE
#3 3 1 2 1 2 TRUE
#4 4 2 9 NA NA FALSE
#5 5 1 2 1 2 TRUE
#6 6 2 9 NA NA FALSE
#7 7 1 3 NA NA FALSE
#8 8 2 9 NA NA FALSE
#9 9 1 8 NA NA FALSE
#10 10 2 2 2 1 TRUE
我想在多个data.tables(或data.frames)中执行相同的操作。例如,我想在所有data.tables中的相同规则上创建相同的变量条件。 列表.df 我的(坏的)试探性的: 很明显,不能像我现在所做的那样创建这个新变量,因为我会收到一条错误消息“Object not found”。有没有关于如何修复我的坏代码的线索?我有一种感觉可以帮助我,但我不知道如何帮助我。
我有数据集,我需要调整通货膨胀的多个变量。它看起来像这样。 我需要把这些都放在一个恒定的格式中(比如2020美元)。我可以用< code>priceR包中的< code > adjust _ for _ inflation 函数很容易地做到这一点。然而,有很多价格变量,所以我想自动创建它们。我一直在尝试使用< code > cross ,但它不起作用。以下是我一直在尝试的。 据我所知,这应该是一个
最近没有使用当前tidyverse动词来回答这个问题(R 4.1 所需的输出应如下所示。感谢您对此的任何帮助!
我有一个数据集,其中有大量表示过程代码的字符串列变量。还有另一列变量表示编码格式(有些是ICD9,有些是其他更神秘的格式)。每次观察都是一个病人。我需要: 搜索每个带有特定前缀的变量名 确保正在使用的代码是ICD9代码(由“02”表示)。 查找这些代码中哪些与特定字符串的前3个字符匹配 如果有任何变量以这三个字符开头,则创建一个新列变量=1,如果没有匹配,则创建一个新列变量=0 变量太多了,通过c
我正在为一个大的数据集创建条件平均值,这个数据集包含了几年来一周内看到的流感病例数。数据是这样组织的: 我想做的是创建一个新的列,列出往年同一周的平均病例数。例如,对于Week所在的行。数字是1和流感。今年是2017年,我希望新行给出任何一年的平均计数。数字==1 但是,由于有四年的数据* 52周,因此需要大量迭代才能阐明条件。有没有办法在dplyr中优雅地编码它?我经常遇到的问题是,我想根据周.
我有一个在不同医院接受治疗的病人的数据集(仅限于住院病人),其中一些分析揭示了几个不一致之处。其中之一是--软件允许病人在不关闭他们之前开放的的情况下入院。 为了更好地理解它,让我们考虑一下示例数据集 如果我们在上面的数据中看到,id为1的患者于1月1日在hospital_1(row-1)入院,并于1月14日出院。出院前患者再次在同一医院入院(第2行);在1月15日(第2行)结束这四项记录之前,再