将对象名称转换为匿名函数中tidyverse链中的字符串

亨森

我正在尝试将对象名称转换为匿名函数中的字符串。首先,我需要在dplyr链中正常调用该对象,然后使用该对象的名称。

我已经尝试了多种方法来解决我的问题,但不确定为什么它们不起作用。直接调用对象而不是在map / lapply链的函数中调用时,我已经成功。

我已经检查了以下三个页面:在R中,如何将对象的名称发送给函数之后?

如何将变量(对象)名称转换为字符串

将quosure转换为R中的字符串

以下是一些简化的示例工作,以说明我要完成的工作以及到目前为止已经完成的工作。

数据(3个小标题):

a18 <- tibble(x = c(1,2,3), 
            y = c(1,2,3))
a19 <- tibble(x = c(1,2,3), 
            y = c(1,2,3))

dat <- 
structure(list(ID = c("12327701006", "12327601004", "12327601006", 
                      "12327601008", "12327701008", "12327701009", "12327701010", "12327701011", 
                      "12326201002", "12334201009"), GRP = c("169", "169", "169", "169", 
                                                             "169", "169", "169", "169", "170", "169"), Stat = c(8.8981219, 
                                                                                                                 4.25978943, 9.17077178, 4.13070278, 9.38120484, 4.32074928, 4.60516953, 
                                                                                                                 4.60194847, 14.23145155, 5.00784539)), class = c("tbl_df", "tbl", 
                                                                                                                                                                  "data.frame"), row.names = c(NA, -10L))

尝试

lapply(list(a18, a19), 
       function(x) (dat %>% 
                      group_by(GRP) %>% 
                      summarize(Stat = sum(Stat)) %>% 
                      ungroup() %>% 
                      mutate(Year = paste0("20", stringr::str_sub(rlang::quo_text(quo(x)), start = -2)))) )

输出量

[[1]]
# A tibble: 2 x 3
GRP    Stat Year
<chr> <dbl> <chr>
1 169    54.4 20x
2 170    14.2 20x

[[2]]
# A tibble: 2 x 3
GRP    Stat Year
<chr> <dbl> <chr>
1 169    54.4 20x
2 170    14.2 20x

这是我需要的输出。它包括全年,例如“ 2018”而不是“ 20x”。

期望的输出

[[1]]
# A tibble: 2 x 3
GRP    Stat Year
<chr> <dbl> <chr>
1 169    54.4 2018
2 170    14.2 2018

[[2]]
# A tibble: 2 x 3
GRP    Stat Year
<chr> <dbl> <chr>
1 169    54.4 2019
2 170    14.2 2019

我不明白为什么它不起作用,因为当我在lapply通话之外执行以下操作时,它会工作,并返回“ 18”而不是“ x”。

stringr::str_sub(rlang::quo_text(quo(a18)), -2)
[1] "18"
阿克伦

我们可以imap在上使用named list(如果用包裹lst,将得到,用str_removepaste(或str_c删除非数字部分,加上“ 20”

library(dplyr)
library(purrr)
library(stringr)
imap(lst(a18, a19), ~ 
     dat %>% 
         group_by(GRP) %>%
         summarize(Stat = sum(Stat)) %>%
         mutate(Year = str_c("20", str_remove(.y, "\\D+"))))

或搭配 str_replace

imap(lst(a18, a19), ~ 
 dat %>% 
     group_by(GRP) %>%
     summarize(Stat = sum(Stat)) %>%
     mutate(Year = str_replace(.y, "\\D+", "20")))
#$a18
# A tibble: 2 x 3
#  GRP    Stat Year 
#  <chr> <dbl> <chr>
#1 169    54.4 2018 
#2 170    14.2 2018 

#$a19
# A tibble: 2 x 3
#  GRP    Stat Year 
#  <chr> <dbl> <chr>
#1 169    54.4 2019 
#2 170    14.2 2019 

或者如果我们使用 list

list(a18 = a18, a19= a19)

或另一个选择是 mget

mget(ls(pattern = "^a\\d+"))

关于为什么thequo()不起作用,将其视为原义'x'。而不是存储在其中的值

stringr::str_sub(rlang::quo_text(quo(x)), -2)
#[1] "x"

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

在AS2中将对象名称转换为字符串

将对象的ArrayList转换为此对象的ArrayList Java中的字符串名称

将对象[,]转换为字符串[,]

根据键中的子字符串将对象转换为对象数组

使用快捷方式引用将 R 对象名称转换为字符串

将对象转换为javascript中的字符串,而键中没有引号

如何将对象中的字符串值转换为数字?

javascript将对象数组转换为字符串以存储在s3中

将对象中的数组转换为单个字符串

将对象类型转换为打字稿中的字符串

如何在Symfony 3中将对象数组转换为字符串?

将对象数组中的所有值转换为字符串?

为什么要在 Javascript 中将对象中的所有值转换为字符串?

如何将对象中的所有属性值转换为字符串类型?

如何将对象数组转换为字符串数组而不丢失Dataweave中的键?

Java-如何将对象从自己的类转换为主类中的字符串?

将对象数据类型转换为python中的字符串问题

在 JavaScript 中将对象中的字符串转换为数字

在javascript中获取JSON对象的对象名称并将其存储在字符串数组中

从 JavaScript 中的对象中提取对象名称作为字符串

如何在 JavaScript 中使用对象名称的字符串将对象作为参数传递?

将对象转换或转换为字符串

用Node.js中的JSON对象响应(将对象/数组转换为JSON字符串)

将对象名称从省略号作为字符串传递到left_join

如何将对象数组转换为 Angular 中的字符串数组以显示在 Angular 材料表中?

如何在JSONArray的字符串中删除不必要的对象名称?

在 Python 中使用列表中的字符串作为对象名称

在 Python 中使用列表中的字符串作为对象名称

将字符串类名称转换为laravel中的对象