我正在尝试在dplyr
pipe
和lapply
函数中使用动态字符串。字符串用于命名稍后在filter
中使用的列。尝试过滤以在!is.na()
内删除具有结果NA(使用filter
)的任何行时,会出现此问题。
对于这种情况,通常会使用filter_
等非标准评估,但由于被调用的字符串位于is.na()
范围内,filter_
无效。我要求使用素数符号(`)而不是引号(“)来调用字符串。
以下是减去lapply
函数的最小示例。
df <- data.frame("one"=c(1,2,3,4),"two"=c(4,NA,2,1))
storeddate <- "Jan17-01-92"
finaldf <- df %>%
mutate(!!storeddate := one+two) %>%
filter(!is.na(storeddate)) #the storeddate string call requires formatting as `Jan17-01-92` as opposed to "Jan17-01-92".
我知道我可以简单地重新格式化初始字符串,但是我更好奇的是找到一种方法来调用以不同格式包装的字符串,以便在其他场景中使用。
答案 0 :(得分:1)
在!!
电话中添加is.na
取消引用操作符:
finaldf <- df %>%
mutate(!!storeddate := one+two) %>%
filter(!is.na(!!storeddate))
答案 1 :(得分:1)
对于过滤器,您需要将字符串转换为符号。例如
df %>%
mutate(!!storeddate := one+two) %>%
filter(!is.na(!!as.name(storeddate)))
# one two Jan17-01-92
# 1 1 4 5
# 2 3 2 5
# 3 4 1 5
所以它不是要取代引号。它在R中的字符串和符号/名称之间有所不同。