【问题标题】:SE issue with conditional mutate条件变异的 SE 问题
【发布时间】:2017-04-05 12:20:03
【问题描述】:

我正在尝试使用 mutate 做一个简单的条件。

代码应基于来自同一数据帧的两个变量创建一个名为“gender”的新变量。

sample <- data.frame(
   client = c("john", "peter", "hanna", "lisa"), 
   id = c(100, 400,  650, 700),
   resident = c('YES', 'YES', 'YES', 'NO'))

 male_index <- as.vector(000:499)
 female_index <- as.vector(500:999)

 sample <- sample %>%
   mutate(gender = ifelse(resident == "YES" & id %in% male_index, "Male", 
   mutate(gender = ifelse(resident == "YES" & id %in% female_index, "Female", "Female"))))

我收到以下错误,我不明白。我想这与SE有关。但是我对R还是不是很熟悉。

mutate_impl(.data, dots) 中的错误:
缺少参数“.data”,没有默认值

如果我使用单个 mutate 语句运行代码,我不会遇到任何问题。

【问题讨论】:

  • 请不要混淆 R 和 dplyrdplyr 是可用于 R 统计计算环境的数据操作包(附加)。您收到的错误是 dplyr 的错误,而不是 R 的错误。
  • 第一个mutatesample 作为其隐含的第一个参数(参见help("%&gt;%")),因为它遵循管道%&gt;%。第二个mutate 不会立即跟随管道,因此它缺少第一个参数。试试mutate(., gender = ....。跟SE没关系。它会抑制错误,但我不确定它是否更有意义

标签: r dplyr non-standard-evaluation standard-evaluation


【解决方案1】:

您不需要在您的ifelse 中调用第二个mutate

sample <- data.frame(
  client = c("john", "peter", "hanna", "lisa"),
  id = c(100, 400,  650, 700),
  resident = c('YES', 'YES', 'YES', 'NO')
)

male_index <- as.vector(000:499)
female_index <- as.vector(500:999)

sample <- sample %>%
  mutate(gender = ifelse(
    resident == "YES" & id %in% male_index,
    "Male",
    ifelse(resident == "YES" &
             id %in% female_index, "Female", "Non-resident")
  ))

现在数据集中的每个人都有一个gender 的分配值。

sample
#  client  id resident gender
#1   john 100      YES   Male
#2  peter 400      YES   Male
#3  hanna 650      YES Female
#4   lisa 700       NO Non-resident

【讨论】:

  • 这种方法的问题是您标记了第 4 个示例 (lisa),她是非居民,具有性别值。第二个 mutate 语句的目的是标记三个值:“male”、“female”、“non-resident”。
  • 我发现我刚刚在答案中编辑的代码存在第二个问题。您的第二个ifelse 条件是“女性”,但这与您的第一个条件相同。你基本上是在问“你是男性吗?然后说'男性'。否则你是女性吗?然后说'女性'。不匹配这两个?然后选择'女性'。”我将第三个选项更改为“非居民”,但您可以随意设置。
  • 总是乐于提供帮助
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-10-25
  • 1970-01-01
  • 2011-10-02
  • 2011-10-19
  • 2010-12-15
  • 2021-08-02
相关资源
最近更新 更多