r - 聚集在 sparklyr
问题描述
我正在使用 sparklyr 来操作一些数据。给定一个,
a<-tibble(id = rep(c(1,10), each = 10),
attribute1 = rep(c("This", "That", 'These', 'Those', "The", "Other", "Test", "End", "Start", 'Beginning'), 2),
value = rep(seq(10,100, by = 10),2),
average = rep(c(50,100),each = 10),
upper_bound = rep(c(80, 130), each =10),
lower_bound = rep(c(20, 70), each =10))
我想使用“收集”来操作数据,如下所示:
b<- a %>%
gather(key = type_data, value = value_data, -c(id:attribute1))
但是,“聚集”在 sparklyr 上不可用。我见过一些人使用 sdf_pivot 来模仿“收集”(例如如何在 sparklyr 中使用 sdf_pivot() 并连接字符串?),但我看不出在这种情况下如何使用它。
有人有想法吗?
干杯!
解决方案
这是gather
在 sparklyr 中模仿的功能。这将收集给定的列,同时保持其他所有内容不变,但如果需要,它可以很容易地扩展。
# Function
sdf_gather <- function(tbl, gather_cols){
other_cols <- colnames(tbl)[!colnames(tbl) %in% gather_cols]
lapply(gather_cols, function(col_nm){
tbl %>%
select(c(other_cols, col_nm)) %>%
mutate(key = col_nm) %>%
rename(value = col_nm)
}) %>%
sdf_bind_rows() %>%
select(c(other_cols, 'key', 'value'))
}
# Example
spark_df %>%
select(col_1, col_2, col_3, col_4) %>%
sdf_gather(c('col_3', 'col_4'))
推荐阅读
- javascript - 使用 Google App Script 在 Google Sheet 中添加一行
- sql - 使用 Postgres 查询时间间隔
- java - 如何初始化输入流
- algorithm - Boost Graph 最大流算法找出最小 S/T 割上的弧
- apache-kafka - Kinesis 到 Kafka
- r - R中只有通过lmer的正系数
- android-studio - 如何在现有的 android webview 应用程序中集成指纹解锁?
- elasticsearch - Elasticsearch:记录更改索引的历史
- javascript - 我如何传递多个日期并仅在选定日期之间启用并禁用 reactjs 中选定日期以外的日期
- npm - 分享 NPM 包