【问题标题】:How to Enquote Multiple independent vars in Gather TidyR?如何在 Gather TidyR 中引用多个独立变量?
【发布时间】:2021-04-29 04:53:17
【问题描述】:

我有这个数据集,我希望将其重塑为长格式:(更新链接)https://drive.google.com/file/d/1EqD58WVXm-v35Jr6GAwL6arxzO_tTyFa/view?usp=sharing

在重塑的手动方法中,我这样做:

census_data <- read.csv(file.choose())
colnames(census_data)[8] <- "CENSUSPOP2010"
census_long <- census_data %>%
  gather(Var, Value, -SUMLEV, -REGION, -DIVISION, -STATE, -COUNTY, -STNAME, -CTYNAME) %>%
  mutate(Time = sub("[A-Za-z]+", "", Var), Type = sub("[\\_0-9]+", "", Var)) %>%
  select(-Var) %>%
  spread(Type, Value)

但我希望独立的变量被引用,所以很容易将它传递给自定义函数,所以我不得不尝试这样定义它:

var <- c("SUMLEV", "REGION", "DIVISION", "STATE", "COUNTY", "STNAME", "CTYNAME")
var_enquos <- enquos(var)
census_long <- census_data %>%
  gather(Var, Value, -!!!var_enquos) %>%
  mutate(Time = sub("[A-Za-z]+", "", Var), Type = sub("[\\_0-9]+", "", Var)) %>%
  select(-Var) %>%
  spread(Type, Value)

但这会产生:Error: Can't use !!! at top level.

难道这种方法都不可能吗?欢迎大家多多指教,谢谢

【问题讨论】:

  • @RonakShah 对不起,我几分钟前上传了它,但我没有意识到它被删除得这么快

标签: r dplyr tidyr gather


【解决方案1】:

这是一种使用pivot_longergather 的继承者)和“curly curly”运算符的方法,它完成了 enquo 和 !!一步到位。

var <- names(mtcars)[2:11]
var
# [1] "cyl"  "disp" "hp"   "drat" "wt"   "qsec" "vs"   "am"   "gear" "carb"


library(tidyverse)
mtcars %>%
  pivot_longer(cols = {{ var }})


# A tibble: 320 x 3
     mpg name   value
   <dbl> <chr>  <dbl>
 1    21 cyl     6   
 2    21 disp  160   
 3    21 hp    110   
 4    21 drat    3.9 
 5    21 wt      2.62
 6    21 qsec   16.5 
 7    21 vs      0   
 8    21 am      1   
 9    21 gear    4   
10    21 carb    4   
# … with 310 more rows

或者如果你想坚持gather:

mtcars %>% 
  gather("name", "value", {{ var }})

有关“curly curly”或“embrace”运算符的更多信息,请参阅以下资源:

https://www.tidyverse.org/blog/2019/06/rlang-0-4-0/#a-simpler-interpolation-pattern-with-

https://sharla.party/post/tidyeval/

https://www.brodrigues.co/blog/2019-06-20-tidy_eval_saga/

curly curly Tidy evaluation and modifying inputs or their names

【讨论】:

  • 双花括号的用例有哪些?能否请您详细说明或分享链接?
猜你喜欢
  • 2018-06-24
  • 1970-01-01
  • 2021-04-21
  • 2017-03-06
  • 2020-07-16
  • 1970-01-01
  • 2015-06-08
  • 1970-01-01
  • 2020-11-26
相关资源
最近更新 更多