gpt4 book ai didi

r - 多个 ifelse 语句和 dplyr 管道,无法识别第二个对象

转载 作者:行者123 更新时间:2023-12-02 06:50:49 24 4
gpt4 key购买 nike

我想要做的是:从一个数据框中获取列,使用 ifelse 语句重新编码它们,然后将它们移动到一个新的数据框中,同时使用 dplyr 和管道一次性完成。

问题:该代码仅适用于一列,但一旦 R 在同一行代码中遇到多于一列,我就会遇到问题。无法识别第二列并且 R 会引发错误。我收到以下错误:

Error in mutate_impl(.data, dots) : Evaluation error: object 'var2_orig' not found.



关于为什么会这样的任何想法?在不使用 ifelse 语句的情况下,可能还有一种更简单的方法。我也愿意接受这方面的建议,但我仍然很好奇如何使用 ifelse 执行此操作以及为什么会出现不止一列的错误。非常感谢。

示例代码:
library(tidyverse)

# creating fake data set
df_orig <- data_frame(var1_orig = sample(1:3, 50, replace = T),
var2_orig = sample(-2:2, 50, replace = T))

# works for one var (recoding 3's as NA, 2's as 1, and 1's as 0):

df_new <- df_orig %>%
as_tibble() %>%
transmute(var1_new = ifelse(var1_orig == 3, NA, ifelse(var1_orig ==
2, 1, ifelse(var1_orig == 1, 0, var1_orig))))

# and works the other var (recoding negatives as NA, 1's and 2's as 1, and
leaving 0's as 0's):

df_new <- df_orig %>%
as_tibble() %>%
transmute(var2_new = ifelse(var2_orig < 0, NA, ifelse(var2_orig ==
1 | var2_orig == 2, 1, 0)))

# but not together in same line of code (error: var2_orig not recognized):

df_new <- df_orig %>%
as_tibble() %>%
transmute(var1_new = ifelse(var1_orig == 3, NA, ifelse(var1_orig ==
2, 1, ifelse(var1_orig == 1, 0, var1_orig)))) %>%
transmute(var2_new = ifelse(var2_orig < 0, NA, ifelse(var2_orig ==
1 | var2_orig == 2, 1, 0)))

最佳答案

Transmute 将删除变量,因此会出现错误。您可以使用 mutate更新现有变量,然后 rename_all (如果需要)改变他们的名字,

df_orig %>%
as_tibble() %>%
mutate(var1_orig = ifelse(var1_orig == 3, NA, ifelse(var1_orig == 2, 1,
ifelse(var1_orig == 1, 0, var1_orig))),
var2_orig = ifelse(var2_orig < 0, NA, ifelse(var2_orig == 1 | var2_orig == 2, 1, 0))) %>%
rename_all(funs(sub('_.*', '_new', .)))

关于r - 多个 ifelse 语句和 dplyr 管道,无法识别第二个对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45059961/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com