R:在mutate()(dplyr包)中可以使用exists()函数吗?

rda*_*tor 11 r dplyr

我想创建一个新变量,以防它不存在.如果它存在则不必更改任何内容,但如果不存在则我想要生成此变量并将其赋予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")
Run Code Online (Sandbox Code Playgroud)

现在我检查var2的存在.

df <- mutate(df, var2 = ifelse(exists('var2')==TRUE,var2,NA))
Run Code Online (Sandbox Code Playgroud)

结果是:

  var1 var2
1   47   NA
2  801   NA
3  660   NA
Run Code Online (Sandbox Code Playgroud)

但是,结果应该是(因为没有什么必须改变:

  var1 var2
1   47   11
2  801   17
3  660   11
Run Code Online (Sandbox Code Playgroud)

有谁知道如何解决这个问题?它甚至可以用exists()完成吗?提前谢谢了.

Sve*_*ein 20

您可以使用

mutate(df, var2 = if (exists('var2', where = df)) var2 else NA)
Run Code Online (Sandbox Code Playgroud)

  • 正是我需要的!只是一个注意事项,因为我在管道周围时感到困惑 - 这相当于:`df%>%foo()%>%mutate(var2 = if(exists('var2',where =.))var2 else NA) %>%bar()` (2认同)