在 Redshift dplyr 操作中重命名汇总列

Min*_*Mai -1 r amazon-redshift dplyr dbplyr

我正在使用 dplyr 在 Redshift 中执行某些操作,因此我不会将数据加载到内存中。

data <- tbl(conn, "customers") %>%
  filter(age >= 18)
subset <- data %>% 
  filter(eye_color != "brown") %>%
  group_by(gender, method, age, region) %>% 
  summarise(sum(purchases)) %>%  # will create a column called sum(purchases)
  full_join(data, by=c("region", "age", "method"))
Run Code Online (Sandbox Code Playgroud)

现在,当我查看生成的数据帧时,我将看到一个名为的列sum(purchases),我想将其重命名为purchases将创建列,purchase.xpurchase.y在合并之后。

到目前为止,我读过的大多数重命名都是处理内存中的数据帧,而不是使用 dbplyr 延迟评估的数据帧。我尝试过使用rename,rename_以及rename_at的不同变体select我也尝试过这里这里列出的策略,但没有运气

有没有办法重命名sum(purchases). 我唯一的其他选择是在某个步骤将数据帧加载到内存中

data <- tbl(conn, "customers") %>%
  filter(age >= 18)
subset <- data %>% 
  filter(eye_color != "brown") %>%
  group_by(gender, method, age, region) %>% 
  summarise(sum(purchases)) %>% 
loaded <- as.data.frame(subset)
# do some join here but in memory and not in Redshift
# full_join(data, by=c("region", "age", "method"))
Run Code Online (Sandbox Code Playgroud)

Pun*_*ded 6

您可以在 中指定名称summarise。我没有你的数据,所以我无法进行三次检查,但我之前在调用summarise(n()). 就像是...

summarise(your_column_name = sum(purchases))
Run Code Online (Sandbox Code Playgroud)

您还可以向其传递带有空格的列名称,只需使用反引号

summarise(`your column name` = sum(purchases))
Run Code Online (Sandbox Code Playgroud)