如何改变列并将R中的8列 Dataframe 转换为3列

bzzcjhmw  于 2023-02-06  发布在  其他
关注(0)|答案(1)|浏览(134)

我正在解一道题,在这一点上卡住了:问题是:首先,选择business_id和包含持续时间信息的七列。然后,将其从宽数据框(具有8列)转换为长数据框(具有3列)。这三列应该是(1)business_id、(2)wday(指定星期几)和(3)duration(指定企业在特定工作日的营业时间)。
This is what I got so far我想改变列的方式,我有一个列显示工作日,一个列显示该天的开始持续时间。

ki0zmccv

ki0zmccv1#

欢迎来到本站!
我会尝试回答你的问题,同时也会告诉你如何写出更有效的问题,以鼓励人们回答。正如@Sotos评论的那样,关键是可重复性。此外,它有助于创建一个"最小"的工作示例,删除大量不必要的数据,以澄清过程。
这段代码创建了一个小的 Dataframe ,类似于您开始时使用的 Dataframe 。

library(tidyr)

df_wide <- tibble(id = 1:3,
                  mon = rnorm(3),
                  tue = rnorm(3),
                  wed = rnorm(3),
                  thr = rnorm(3))
df_wide
#> # A tibble: 3 × 5
#>      id    mon    tue    wed    thr
#>   <int>  <dbl>  <dbl>  <dbl>  <dbl>
#> 1     1 -0.779 -0.691  1.22  -0.354
#> 2     2  1.16   0.650  0.824 -0.569
#> 3     3  0.128 -1.79  -1.31  -1.33

reprex package(v2.0.1)于2023年2月1日创建
为了把你的 Dataframe 转换成长格式,你可以使用tidyr包中的pivot_longer函数。你可以通过输入?pivot_longer找到关于使用这个函数的更详细的帮助。

library(tidyr)

df_wide <- tibble(id = 1:3,
                  mon = rnorm(3),
                  tue = rnorm(3),
                  wed = rnorm(3),
                  thr = rnorm(3))
df_wide
#> # A tibble: 3 × 5
#>      id    mon    tue    wed    thr
#>   <int>  <dbl>  <dbl>  <dbl>  <dbl>
#> 1     1 -0.864  1.18   0.605 -0.337
#> 2     2 -0.261  0.224 -1.16  -0.359
#> 3     3 -1.28  -0.849  0.333  0.896
df_long <- pivot_longer(data = df_wide,
                        cols = 2:5,
                        names_to = "wday",
                        values_to = "duration")
df_long
#> # A tibble: 12 × 3
#>       id wday  duration
#>    <int> <chr>    <dbl>
#>  1     1 mon     -0.864
#>  2     1 tue      1.18 
#>  3     1 wed      0.605
#>  4     1 thr     -0.337
#>  5     2 mon     -0.261
#>  6     2 tue      0.224
#>  7     2 wed     -1.16 
#>  8     2 thr     -0.359
#>  9     3 mon     -1.28 
#> 10     3 tue     -0.849
#> 11     3 wed      0.333
#> 12     3 thr      0.896

reprex package(v2.0.1)于2023年2月1日创建

相关问题