【问题标题】:Permute a column in R [duplicate]在R中置换一列[重复]
【发布时间】:2020-04-10 22:34:11
【问题描述】:

我有一个数据集,df:

Action                        Date

Begin                         3/16/2020 12:35:47 PM
End                           3/16/2020 12:35:49 PM
Begin                         3/16/2020 01:35:47 PM
End                           3/16/2020 01:35:49 PM

期望的结果:

Begin                          End

3/16/2020 12:35:47 PM           3/16/2020 12:35:49 PM
3/16/2020 01:35:47 PM           3/16/2020 01:35:49 PM

输入:

 structure(list(Action = structure(c(1L, 2L, 1L, 2L), .Label =       c("Begin", 
 "End"), class = "factor"), Date = structure(c(3L, 4L, 1L, 2L),      .Label = c("3/16/2020 1:35:47 PM", 
 "3/16/2020 1:35:49 PM", "3/16/2020 12:35:47 PM", "3/16/2020     12:35:49 PM"
  ), class = "factor")), class = "data.frame", row.names = c(NA, 
 -4L))

我尝试过的:

I think this is a permute type problem, but not exactly sure.
Permute(df, invertdf=FALSE)

任何建议都有帮助。

【问题讨论】:

    标签: r dplyr tidyverse tidyr


    【解决方案1】:

    我们可以在创建序列列后转为“宽”格式

    library(dplyr)
    library(data.table)
    library(tidyr)
    df %>% 
        mutate(rn = rowid(Action)) %>% 
        pivot_wider(names_from = Action, values_from = Date) %>%
        select(-rn)
    # A tibble: 2 x 2
    #  Begin                 End                  
    #  <fct>                 <fct>                
    #1 3/16/2020 12:35:47 PM 3/16/2020 12:35:49 PM
    #2 3/16/2020 1:35:47 PM  3/16/2020 1:35:49 PM 
    

    data.table

    library(data.table)
    dcast(setDT(df), rowid(Action) ~ Action, value.var = 'Date')[, Action := NULL][]
    #              Begin                   End
    #1: 3/16/2020 12:35:47 PM 3/16/2020 12:35:49 PM
    #2:  3/16/2020 1:35:47 PM  3/16/2020 1:35:49 PM
    

    或者不使用带有unstack 的外部包(假设'Begin'、'End' 的长度相同)

    unstack(df, Date ~ Action)
    #              Begin                   End
    #1 3/16/2020 12:35:47 PM 3/16/2020 12:35:49 PM
    #2  3/16/2020 1:35:47 PM  3/16/2020 1:35:49 PM
    

    【讨论】:

    • 嗨@akrun,谢谢,它说pivot_wider中的错误(。,names_from = Action,values_from = Date):找不到函数“pivot_wider”
    • @TanishaHudson 抱歉,library(tidyr) 忘记了,已更新
    • 不抱歉,谢谢它有效。我会在 5 分钟内提交复选标记。
    • 据我所知,枢轴更宽本质上与“置换”相同吗?
    • 啊好吧!惊人的。我会读到'pivot更广泛'谢谢!
    猜你喜欢
    • 1970-01-01
    • 2021-09-06
    • 1970-01-01
    • 2016-05-10
    • 2018-05-15
    • 1970-01-01
    • 2018-04-26
    • 2020-02-16
    • 1970-01-01
    相关资源
    最近更新 更多