R Pivot table 将列转换为仅行
R Pivot table with columns converted to only rows
我基本上是做营销数据的报告,并且正在尝试在 R 中进行一些自动化工作。
在 excel 中,我们可以将 select 列拖动到数据透视表 table 的 "Rows" 区域以汇总数据。我有类似的情况,我想对数据集的 3 列中的 2 列进行分组或总结,其中第 3 列是区分其他两列的关键。
详细说明:在下面的数据集中,我有 3 列(带有虚拟数据)命名、展示位置 ID、日期和设备。在这里我们看到一个展示位置 ID 在同一天重复 3 次,但在不同的设备上。
Placement ID Date Device
12456362 31-08-2018 Mobile
12456363 30-08-2018 Desktop
12456364 25-08-2018 Tablet
12456362 31-08-2018 Tablet
12456363 30-08-2018 Desktop
12456364 25-08-2018 Mobile
12456362 31-08-2018 Desktop
12456363 30-08-2018 Mobile
12456364 25-08-2018 Tablet
12456362 24-08-2018 Tablet
12456363 12-08-2018 Desktop
12456364 10-08-2018 Mobile
12456362 19-08-2018 Desktop
12456363 25-08-2018 Mobile
12456364 25-08-2018 Tablet
12456362 10-08-2018 Mobile
12456363 19-08-2018 Desktop
12456364 30-08-2018 Tablet
现在我有了参考文件,我必须在其中填写每个展示位置 ID 的费用。参考文件只有两列,即日期和展示位置 ID,其中没有重复项,即每个展示位置 ID 都有不同的日期和与之相关的相应费用。这是一个例子:
Placement ID Date Cost
12456362 10-08-2018 1200
12456362 19-08-2018 1300
12456362 24-08-2018 1400
12456362 31-08-2018 1500
12456363 12-08-2018 1600
12456363 19-08-2018 1700
12456363 25-08-2018 1800
12456363 30-08-2018 1900
12456364 10-08-2018 2000
12456364 25-08-2018 2100
12456364 30-08-2018 2200
现在在 excel 中,我会简单地创建数据透视表 table 并将日期和展示位置 ID 拖到 'Rows' 字段下以将其全部聚合,这里是期望的输出:
Placement ID Date
12456362 10-08-2018
12456362 19-08-2018
12456362 24-08-2018
12456362 31-08-2018
12456363 12-08-2018
12456363 19-08-2018
12456363 25-08-2018
12456363 30-08-2018
12456364 10-08-2018
12456364 25-08-2018
12456364 30-08-2018
我想在 R 中实现上述结果。我已经尝试过熔化和转换函数,但是当我熔化数据集时我没有将 2 列与任何值相关联,这是我做不到的,所以 df_melt 返回的行数多于 df 的原始计数。这是代码:
df_Melt <- melt(_df, id.vars=c("Date","Placement ID"))
提前致谢。
能否为您的数据集创建一个可重现的示例? dput()
melt 几乎总是会增加行数,你试过了吗
library(tidyverse)
Pivot <- _df %>% gather_by(Date,Placement_ID) %>% summarise(Mean_Value? = mean(Value))
# example data
df = read.table(text = "
PlacementID Date Device
12456362 31-08-2018 Mobile
12456363 30-08-2018 Desktop
12456364 25-08-2018 Tablet
12456362 31-08-2018 Tablet
12456363 30-08-2018 Desktop
12456364 25-08-2018 Mobile
12456362 31-08-2018 Desktop
12456363 30-08-2018 Mobile
12456364 25-08-2018 Tablet
12456362 24-08-2018 Tablet
12456363 12-08-2018 Desktop
12456364 10-08-2018 Mobile
12456362 19-08-2018 Desktop
12456363 25-08-2018 Mobile
12456364 25-08-2018 Tablet
12456362 10-08-2018 Mobile
12456363 19-08-2018 Desktop
12456364 30-08-2018 Tablet
", header=T, stringsAsFactors=T)
library(dplyr)
library(lubridate)
df %>%
distinct(PlacementID, Date) %>% # get distinct combinations of those columns
arrange(PlacementID, dmy(Date)) # order by those columns
那 returns:
# PlacementID Date
# 1 12456362 10-08-2018
# 2 12456362 19-08-2018
# 3 12456362 24-08-2018
# 4 12456362 31-08-2018
# 5 12456363 12-08-2018
# 6 12456363 19-08-2018
# 7 12456363 25-08-2018
# 8 12456363 30-08-2018
# 9 12456364 10-08-2018
# 10 12456364 25-08-2018
# 11 12456364 30-08-2018
请注意,如果您已经为列 Date
设置了日期格式,则无需使用 lubridate
和函数 ymd
.
如果您只是探索数据,请试试 rpivot:
library(rpivotTable)
df %>%
rpivotTable()
我基本上是做营销数据的报告,并且正在尝试在 R 中进行一些自动化工作。
在 excel 中,我们可以将 select 列拖动到数据透视表 table 的 "Rows" 区域以汇总数据。我有类似的情况,我想对数据集的 3 列中的 2 列进行分组或总结,其中第 3 列是区分其他两列的关键。
详细说明:在下面的数据集中,我有 3 列(带有虚拟数据)命名、展示位置 ID、日期和设备。在这里我们看到一个展示位置 ID 在同一天重复 3 次,但在不同的设备上。
Placement ID Date Device
12456362 31-08-2018 Mobile
12456363 30-08-2018 Desktop
12456364 25-08-2018 Tablet
12456362 31-08-2018 Tablet
12456363 30-08-2018 Desktop
12456364 25-08-2018 Mobile
12456362 31-08-2018 Desktop
12456363 30-08-2018 Mobile
12456364 25-08-2018 Tablet
12456362 24-08-2018 Tablet
12456363 12-08-2018 Desktop
12456364 10-08-2018 Mobile
12456362 19-08-2018 Desktop
12456363 25-08-2018 Mobile
12456364 25-08-2018 Tablet
12456362 10-08-2018 Mobile
12456363 19-08-2018 Desktop
12456364 30-08-2018 Tablet
现在我有了参考文件,我必须在其中填写每个展示位置 ID 的费用。参考文件只有两列,即日期和展示位置 ID,其中没有重复项,即每个展示位置 ID 都有不同的日期和与之相关的相应费用。这是一个例子:
Placement ID Date Cost
12456362 10-08-2018 1200
12456362 19-08-2018 1300
12456362 24-08-2018 1400
12456362 31-08-2018 1500
12456363 12-08-2018 1600
12456363 19-08-2018 1700
12456363 25-08-2018 1800
12456363 30-08-2018 1900
12456364 10-08-2018 2000
12456364 25-08-2018 2100
12456364 30-08-2018 2200
现在在 excel 中,我会简单地创建数据透视表 table 并将日期和展示位置 ID 拖到 'Rows' 字段下以将其全部聚合,这里是期望的输出:
Placement ID Date
12456362 10-08-2018
12456362 19-08-2018
12456362 24-08-2018
12456362 31-08-2018
12456363 12-08-2018
12456363 19-08-2018
12456363 25-08-2018
12456363 30-08-2018
12456364 10-08-2018
12456364 25-08-2018
12456364 30-08-2018
我想在 R 中实现上述结果。我已经尝试过熔化和转换函数,但是当我熔化数据集时我没有将 2 列与任何值相关联,这是我做不到的,所以 df_melt 返回的行数多于 df 的原始计数。这是代码:
df_Melt <- melt(_df, id.vars=c("Date","Placement ID"))
提前致谢。
能否为您的数据集创建一个可重现的示例? dput()
melt 几乎总是会增加行数,你试过了吗
library(tidyverse)
Pivot <- _df %>% gather_by(Date,Placement_ID) %>% summarise(Mean_Value? = mean(Value))
# example data
df = read.table(text = "
PlacementID Date Device
12456362 31-08-2018 Mobile
12456363 30-08-2018 Desktop
12456364 25-08-2018 Tablet
12456362 31-08-2018 Tablet
12456363 30-08-2018 Desktop
12456364 25-08-2018 Mobile
12456362 31-08-2018 Desktop
12456363 30-08-2018 Mobile
12456364 25-08-2018 Tablet
12456362 24-08-2018 Tablet
12456363 12-08-2018 Desktop
12456364 10-08-2018 Mobile
12456362 19-08-2018 Desktop
12456363 25-08-2018 Mobile
12456364 25-08-2018 Tablet
12456362 10-08-2018 Mobile
12456363 19-08-2018 Desktop
12456364 30-08-2018 Tablet
", header=T, stringsAsFactors=T)
library(dplyr)
library(lubridate)
df %>%
distinct(PlacementID, Date) %>% # get distinct combinations of those columns
arrange(PlacementID, dmy(Date)) # order by those columns
那 returns:
# PlacementID Date
# 1 12456362 10-08-2018
# 2 12456362 19-08-2018
# 3 12456362 24-08-2018
# 4 12456362 31-08-2018
# 5 12456363 12-08-2018
# 6 12456363 19-08-2018
# 7 12456363 25-08-2018
# 8 12456363 30-08-2018
# 9 12456364 10-08-2018
# 10 12456364 25-08-2018
# 11 12456364 30-08-2018
请注意,如果您已经为列 Date
设置了日期格式,则无需使用 lubridate
和函数 ymd
.
如果您只是探索数据,请试试 rpivot:
library(rpivotTable)
df %>%
rpivotTable()