簡體   English   中英

在mutate和合並中使用變量名

[英]Using variable name in mutate and coalesce

我有以下合並兩個數據幀的代碼

prim <- data.frame("t"=2007:2012,
                   "a"=1:6,
                   "b"=7:12)

secnd <- data.frame("t"=2012:2013,
                    "a"=c(5, 7))

final_df <- prim %>% full_join(secnd, by = 't') %>%
  mutate(a = coalesce(as.integer(a.y),a.x)) %>%
  select(t,a,b)

是否可以使用變量名而不是像上面那樣對a進行硬編碼? 即,是否可以使以下無法運行的代碼正常工作?

var <- "a"
final_df <- prim %>% full_join(secnd, by = 't') %>%
  mutate(var = coalesce(as.integer(var.y),var.x)) %>%
  select(t,var,b)

一個辦法是轉換為符號與syms和評估( !!!

library(tidyverse)
var <- "a"
prim %>% 
  full_join(secnd, by = "t") %>%
  mutate_at(vars(starts_with(var)), as.integer) %>% 
  transmute(t, !! var := coalesce(!!! rlang::syms(paste0(var, c(".y", ".x")))), b)
#     t a  b
#1 2007 1  7
#2 2008 2  8
#3 2009 3  9
#4 2010 4 10
#5 2011 5 11
#6 2012 5 12
#7 2013 7 NA

我們可以使用:=賦值運算符在左側進行標准評估:

library(dplyr)
library(rlang)

var <- "a"
final_df <- prim %>% full_join(secnd, by = 't') %>%
  mutate(!!var := coalesce(as.integer(!!sym(paste0(var, ".y"))),!!sym(paste0(var, ".x")))) %>%
  select(t,var,b)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM