【问题标题】:R: Can exists() function be used within mutate() (dplyr package)?R:可以在 mutate() (dplyr 包)中使用 exists() 函数吗?
【发布时间】:2015-04-01 07:54:19
【问题描述】:

我想创建一个新变量以防它不存在。如果它存在,则无需更改任何内容,但如果不存在,我想创建此变量并为其提供 NA 值。我尝试使用 dplyr 包的 mutate 函数来执行此操作,但结果只得到 NA。

library(dplyr)    
df <- structure(list(var1 = c(47, 801, 660), var2 = c(11, 
17, 11)), .Names = c("var1", "var2"), row.names = c(NA, 
3L), class = "data.frame")

现在我检查 var2 是否存在。

df <- mutate(df, var2 = ifelse(exists('var2')==TRUE,var2,NA))

结果是:

  var1 var2
1   47   NA
2  801   NA
3  660   NA

但是,结果应该是(因为什么都不需要改变:

  var1 var2
1   47   11
2  801   17
3  660   11

有谁知道如何解决这个问题?甚至可以用exists()来完成吗?非常感谢。

【问题讨论】:

  • 你在var1上有引号,试试!is.na(var1)而不是exists('var1'),也是var2应该是var1吗?
  • 我不需要检查na,而是检查变量的存在。我会用 !exists(var1) 试试这个。
  • 我编辑了问题和变异函数,希望现在问题更清楚了。
  • mutate(df, var2 = if ("var1" %in% names(df)) var1 else NA)这样的东西呢?
  • 感谢提示!!!这似乎有效: df

标签: r dplyr


【解决方案1】:

你可以使用

mutate(df, var2 = if (exists('var2', where = df)) var2 else NA)

【讨论】:

  • 正是我需要的!只是一个注释,因为我在管道周围时会感到困惑 - 这相当于:df %&gt;% foo() %&gt;% mutate(var2 = if (exists('var2', where=.)) var2 else NA) %&gt;% bar()
  • @dwanderson 除了foo()bar(),两个命令都是一样的。
猜你喜欢
  • 2015-03-20
  • 1970-01-01
  • 1970-01-01
  • 2023-01-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-06-13
相关资源
最近更新 更多