【问题标题】:Combine 2 rows in 1 duplicating the values in r将 2 行合为 1,复制 r 中的值
【发布时间】:2021-04-08 17:35:42
【问题描述】:

我有这个数据

data.frame(start_date =as.Date(c('2020-03-02', '2020-03-09', '2020-03-16')),
           end_date =as.Date(c('2020-03-06', '2020-03-13', '2002-03-20')),
           a = c(9, 1, 8),
           b = c(6, 5, 7))

我想操纵它来改变它

data.frame(date =as.Date(c('2020-03-02', '2020-03-09', '2020-03-16', '2020-03-06', '2020-03-13', '2002-03-20')),
           a = c(9, 1, 8, 9, 1, 8),
           b = c(6, 5, 7, 6, 5, 7))

我该怎么做?谢谢!

【问题讨论】:

  • 使用df1 %>% pivot_longer(cols = start_date:end_date, values_to = 'date') %>% select(-name)
  • AAAAAAAAAHHHH!谢谢!!!!!!!!!!!!!!!

标签: r dataframe tidyverse data-manipulation


【解决方案1】:

您可以使用 tidyr 收集功能来获取此信息。

-首先将数据框分配为对象。

-然后,分别收集开始和结束日期及其 a 和 b 值。 (通过用减号“-”从收集中排除 a 和 b。)用“日期”更改值列的名称。收集的输出是这样的。

df %>%
  gather(key, value = "date", -a, -b)
          a b        key       date
        1 9 6 start_date 2020-03-02
        2 1 5 start_date 2020-03-09
        3 8 7 start_date 2020-03-16
        4 9 6   end_date 2020-03-06
        5 1 5   end_date 2020-03-13
        6 8 7   end_date 2002-03-20

-对于最后一部分,为了摆脱“关键”列(开始日期和结束日期),只选择你想要的。

查看下面的完整代码:

df <- data.frame(start_date =as.Date(c('2020-03-02', '2020-03-09', '2020-03-16')),
           end_date =as.Date(c('2020-03-06', '2020-03-13', '2002-03-20')),
           a = c(9, 1, 8),
           b = c(6, 5, 7)) #df assignment to an object

df1 <- df %>%
  gather(key, value = "date", -a, -b) %>% #gathering dates
  select(date, a, b) #choosing what is needed

-这个完整的代码带来了这个输出:

        date a b
1 2020-03-02 9 6
2 2020-03-09 1 5
3 2020-03-16 8 7
4 2020-03-06 9 6
5 2020-03-13 1 5
6 2002-03-20 8 7

【讨论】:

    猜你喜欢
    • 2012-06-26
    • 2023-03-05
    • 1970-01-01
    • 2012-06-20
    • 1970-01-01
    • 1970-01-01
    • 2018-10-20
    • 2016-07-25
    相关资源
    最近更新 更多