以长格式向数据框中添加一行

用户3206440

给定一个df如下所示的数据框

text <- "
parameter,car,qtr,val
a,a3,FY18Q1,23
b,a3,FY18Q1,10000
a,a3,FY18Q2,14
b,a3,FY18Q2,12000
a,cla,FY18Q1,15
b,cla,FY18Q1,12000
c,cla,FY18Q1,5.5
a,cla,FY18Q2,26
b,cla,FY18Q2,10000
c,cla,FY18Q2,6.2
"
df <- read.table(textConnection(text), sep = ",", header = TRUE)

我想b_diff为每个car, qtr组合添加一行参数val作为b连续两个参数的差异qtrqtr升序FY18Q1, FY18Q2对于第一个qtrFY18Q1,在valb_diff应NA,因为没有previous qtr

预期输出如下。

parameter   car qtr val
a   a3  FY18Q1  23
b   a3  FY18Q1  10000
b_diff  a3  FY18Q1  NA
a   a3  FY18Q2  14
b   a3  FY18Q2  12000
b_diff  a3  FY18Q2  2000
a   cla FY18Q1  15
b   cla FY18Q1  12000
c   cla FY18Q1  5.5
b_diff  cla FY18Q1  NA
a   cla FY18Q2  26
b   cla FY18Q2  10000
c   cla FY18Q2  6.2
b_diff  cla FY18Q2  -2000

我该怎么做dplyr呢?

万维网

使用解决方案我们可以使用group_indices并基于它创建一个组 ID ,以拆分数据框、汇总数据然后组合它们。df5是最终的输出。

library(dplyr)
library(purrr)

df2 <- df %>% mutate(GroupID = group_indices(., car, qtr))

df3 <- df2 %>%
  filter(parameter %in% "b") %>%
  group_by(car) %>%
  mutate(val = val - lag(val), parameter = "b_diff") %>%
  ungroup() %>%
  split(f = .$GroupID)

df4 <- df2 %>% split(f = .$GroupID)

df5 <- map2_dfr(df4, df3, bind_rows) %>% select(-GroupID)

df5
#    parameter car    qtr     val
# 1          a  a3 FY18Q1    23.0
# 2          b  a3 FY18Q1 10000.0
# 3     b_diff  a3 FY18Q1      NA
# 4          a  a3 FY18Q2    14.0
# 5          b  a3 FY18Q2 12000.0
# 6     b_diff  a3 FY18Q2  2000.0
# 7          a cla FY18Q1    15.0
# 8          b cla FY18Q1 12000.0
# 9          c cla FY18Q1     5.5
# 10    b_diff cla FY18Q1      NA
# 11         a cla FY18Q2    26.0
# 12         b cla FY18Q2 10000.0
# 13         c cla FY18Q2     6.2
# 14    b_diff cla FY18Q2 -2000.0

数据

请注意,最好拥有stringsAsFactors = FALSE.

text <- "
parameter,car,qtr,val
a,a3,FY18Q1,23
b,a3,FY18Q1,10000
a,a3,FY18Q2,14
b,a3,FY18Q2,12000
a,cla,FY18Q1,15
b,cla,FY18Q1,12000
c,cla,FY18Q1,5.5
a,cla,FY18Q2,26
b,cla,FY18Q2,10000
c,cla,FY18Q2,6.2
"
df <- read.table(textConnection(text), sep = ",", header = TRUE, stringsAsFactors = FALSE)

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类常见问题

在数据框中从长格式转换为宽格式

来自分类Dev

在OpenCV中向矩阵添加一行

来自分类Dev

使用数据源向UITableView添加一行

来自分类Dev

根据上一行中的日期将行添加到数据框中

来自分类Dev

向数据添加另一行

来自分类Dev

向数据框中的所有行添加常量值

来自分类Dev

从下一行SQL中的数据向列添加值

来自分类Dev

向行添加值列表,然后将数据框转换为长格式

来自分类Dev

在Julia中向矩阵添加一行?

来自分类Dev

通过一行访问Pandas数据框中的数据

来自分类Dev

向函数内数据框中的前一行添加值

来自分类Dev

向数据框列表中添加新列,但仅选择向量的一行

来自分类Dev

熊猫:在一行中向数据框添加几列

来自分类Dev

如何在整个熊猫数据框中添加或减去一行?

来自分类Dev

在数据框中添加一行并命名

来自分类Dev

循环遍历数据框中的元素,并根据条件添加一行

来自分类Dev

根据R中前一行的条件将行添加到数据框

来自分类Dev

使用dplyr在数据框中每个组的开头添加一行

来自分类Dev

在R中向数据框的行添加列表

来自分类Dev

向R中的数据框添加一个新列,该列包含每一行中最频繁的值

来自分类Dev

在数据框中从长格式转换为宽格式

来自分类Dev

R:在数据框中添加一行,每列的中位数

来自分类Dev

向ObjectListView添加一行数据

来自分类Dev

向数据框列表中添加新列,但仅选择向量的一行

来自分类Dev

在不知道列数的情况下在pandas数据框中添加一行

来自分类Dev

向数据框中添加一行,它是 2 个现有行的总和

来自分类Dev

将列表添加到数据框中的每一行

来自分类Dev

如何在 NetLogo 中向矩阵添加一行?

来自分类Dev

对每一行数据框的列求和,并在多级索引熊猫数据框中添加新列

Related 相关文章

  1. 1

    在数据框中从长格式转换为宽格式

  2. 2

    在OpenCV中向矩阵添加一行

  3. 3

    使用数据源向UITableView添加一行

  4. 4

    根据上一行中的日期将行添加到数据框中

  5. 5

    向数据添加另一行

  6. 6

    向数据框中的所有行添加常量值

  7. 7

    从下一行SQL中的数据向列添加值

  8. 8

    向行添加值列表,然后将数据框转换为长格式

  9. 9

    在Julia中向矩阵添加一行?

  10. 10

    通过一行访问Pandas数据框中的数据

  11. 11

    向函数内数据框中的前一行添加值

  12. 12

    向数据框列表中添加新列,但仅选择向量的一行

  13. 13

    熊猫:在一行中向数据框添加几列

  14. 14

    如何在整个熊猫数据框中添加或减去一行?

  15. 15

    在数据框中添加一行并命名

  16. 16

    循环遍历数据框中的元素,并根据条件添加一行

  17. 17

    根据R中前一行的条件将行添加到数据框

  18. 18

    使用dplyr在数据框中每个组的开头添加一行

  19. 19

    在R中向数据框的行添加列表

  20. 20

    向R中的数据框添加一个新列,该列包含每一行中最频繁的值

  21. 21

    在数据框中从长格式转换为宽格式

  22. 22

    R:在数据框中添加一行,每列的中位数

  23. 23

    向ObjectListView添加一行数据

  24. 24

    向数据框列表中添加新列,但仅选择向量的一行

  25. 25

    在不知道列数的情况下在pandas数据框中添加一行

  26. 26

    向数据框中添加一行,它是 2 个现有行的总和

  27. 27

    将列表添加到数据框中的每一行

  28. 28

    如何在 NetLogo 中向矩阵添加一行?

  29. 29

    对每一行数据框的列求和,并在多级索引熊猫数据框中添加新列

热门标签

归档