【发布时间】:2018-04-30 11:55:46
【问题描述】:
我想filter 我的tibble 在几个具有相似名称的列上。具体来说,我想比较x 与x_new,y 与y_new 等等,但没有指定显式名称,而是使用列名称中的结构。
我尝试使用filter_at,但这不起作用,因为我不知道如何正确评估最后一行中的公式。
my_df %>%
filter_at(vars(contains("_new")), any_vars(funs({
x <- .
x_name <- quo_name(quo(x))
x_new_name <- str_replace(x_name, "_new", "")
paste(x_name, "!=", x_new_name)
})
))
数据
my_df <- tibble(x = 1:5,
x_new = c(1:4, 1),
y = letters[1:5],
y_new = c(letters[1:3], "a", "e"))
# A tibble: 5 x 4
# x x_new y y_new
# <int> <dbl> <chr> <chr>
# 1 1 1. a a
# 2 2 2. b b
# 3 3 3. c c
# 4 4 4. d a
# 5 5 1. e e
预期输出
# A tibble: 2 x 4
# x x_new y y_new
# <int> <dbl> <chr> <chr>
# 1 4 4. d a
# 2 5 1. e e
【问题讨论】:
-
你有最后一行
paste(x_name, "!=", x_new_name)没有被评估 -
是的,但我该如何评估呢?我试过
eval,!!,但它不起作用。问题是,我猜,评估的环境还不清楚...... -
另外,您正在尝试对相似的列进行分组并进行比较。可能你需要
map