首页 > 解决方案 > Dplyr 数据框操作

问题描述

我有一个数据框。

# Input dataframe
Input <- data.frame(Date = as.Date(c(12001, 12002, 12003, 12001, 12002, 14000), origin = "1970-01-01"),
                    Model = as.factor(c("A","A","A","B","B","B")),
                    Cu = c(2,4,3,54,39,41),
                    Pb = c(9,10,7,22,25,19))

我必须使用一dpylr 函数(允许使用管道 %>%)将结构转换为下面的输出示例。

# Output dataframe
Output <- data.frame(Date = as.Date(c(12001, 12002), origin = "1970-01-01"),
                     Cu_A = c(2,4),
                     Cu_B = c(54,39),
                     Pb_A = c(9,10),
                     Pb_B = c(22,25))

注意:因子列现在已成为数字列名称的一部分。此外,模型 A 和模型 B 之间不常见的日期不会出现在输出中(半连接)。解决方案必须是一组 dplyr 函数,因为它将用于创建响应式 Shiny 数据帧。

标签: rdplyr

解决方案


我们可以只保留每个日期的一部分,Model并以宽格式获取数据。

library(dplyr)
Input %>%
  group_by(Date) %>%
  filter(n_distinct(Model) == n_distinct(.$Model)) %>%
  tidyr::pivot_wider(names_from = Model, values_from = c(Cu, Pb))

#  Date        Cu_A  Cu_B  Pb_A  Pb_B
#  <date>     <dbl> <dbl> <dbl> <dbl>
#1 2002-11-10     2    54     9    22
#2 2002-11-11     4    39    10    25

推荐阅读