【问题标题】:multiply certain columns based on name R dplyr根据名称 R dplyr 乘以某些列
【发布时间】:2021-05-07 15:43:35
【问题描述】:

我有一个如下形式的数据集

Product   1/1/2020.x  1/1/2019.x  1/1/2018_x  1/1/2020.y  1/1/2019.y  1/1/2018.y
   1          10          11          10           1           1           1
   2          12          12           0           2           1           0
   3          20          10          12           2           1           2
   4          30           3           1           3           3           1
   5          21           3           1           1           3           1

我想创建一个新的数据集,其中每对 x 和 y 列(相同的日期前缀)相乘。我无法手动执行此操作,因为列数超过 100。生成的数据框应采用以下形式。

Product   1/1/2020     1/1/2019    1/1/2018      
   1          10          11          10          
   2          24          12           0           
   3          40          10          24            
   4          90           9           1            
   5          21           9           1            

【问题讨论】:

  • tidyr 包中签出pivot_longer

标签: r data-analysis


【解决方案1】:

使用 tidyverse

library(tidyverse)
df <- read.table(text = "Product   1/1/2020.x  1/1/2019.x  1/1/2018.x  1/1/2020.y  1/1/2019.y  1/1/2018.y
   1          10          11          10           1           1           1
   2          12          12           0           2           1           0
   3          20          10          12           2           1           2
   4          30           3           1           3           3           1
   5          21           3           1           1           3           1", header = T)
df %>% 
  pivot_longer(-Product, names_to = c("set", ".value"), names_pattern = "(.*)(.)") %>% 
  transmute(Product, set, z = x * y) %>% 
  pivot_wider(Product, names_from = set, values_from = z)
#> # A tibble: 5 x 4
#>   Product X1.1.2020. X1.1.2019. X1.1.2018.
#>     <int>      <int>      <int>      <int>
#> 1       1         10         11         10
#> 2       2         24         12          0
#> 3       3         40         10         24
#> 4       4         90          9          1
#> 5       5         21          9          1

reprex package (v1.0.0) 于 2021 年 2 月 3 日创建

【讨论】:

  • 能否解释一下代码中的pivot_longer部分。
  • 我的英语不好解释。例如,我们使用names_pattern = "(.*)(.)" 划分 2020 年 1 月 1 日。 x 分成两部分。 “2020 年 1 月 1 日”。部分进入“set”列,数值进入“x”列。示例可以在?pivot_longerhelp 中找到。
猜你喜欢
  • 1970-01-01
  • 2018-03-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-07-20
  • 2021-08-12
相关资源
最近更新 更多