【问题标题】:create columns with dplyr使用 dplyr 创建列
【发布时间】:2020-03-18 13:40:01
【问题描述】:

晚安!我是巴西人,英语说得不太好。我使用的数据库超过 10000 行,如下例所示。

df <- data.frame(
  PROCESS = c(180022121, 180022121, 180022105, 180022105, 180022097, 180022097, 180022097, 180022501, 180022501), 
  NAME = c("A_NONIMATO", "A_NONIMATO", "C_NONIMATO", "C_NONIMATO", "D_NONIMATO", "D_NONIMATO", "D_NONIMATO", "G_NONIMATO", "G_NONIMATO"),DATE = c("02/01/2018", "02/01/2018", "01/01/2018", "01/01/2018", "01/01/2018", "01/01/2018", "01/01/2018", "02/01/2018", "02/01/2018"), 
  CRIME = c("ART.33", "ART.33", "ART.35", "ART.33", "ART.155", "ART.155", "ART.155", "ART.157", "ART.14CP"))

我的问题:我想创建列(CRIME2、CRIME3、CRIME4 等),按照相同的流程、相同的名称和相同的日期将犯罪分开。有多少犯罪就有多少列。

看起来像这样:

df2 <- data.frame(PROCESS = c(180022121, 180022105, 180022097, 180022501), 
                  NAME = c("A_NONIMATO", "C_NONIMATO", "D_NONIMATO", "G_NONIMATO"), 
                  DATE = c("02/01/2018", "01/01/2018", "01/01/2018", "02/01/2018"), 
                  CRIME = c("ART.33", "ART.35", "ART.155", "ART.157"),  
                  CRIME2 = c("ART.33", "ART.33", "ART.155", "ART.14CP"), 
                  CRIME3 = c("NA", "NA", "ART.155", "NA"), 
                  CRIME4 = c("NA", "NA", "NA", "NA"))

【问题讨论】:

标签: r dplyr


【解决方案1】:

我们可以基于PROCESSNAMEDATE创建一个唯一标识符列,并将数据重新整形为宽格式。

library(dplyr)

df %>%
  group_by(PROCESS, NAME, DATE) %>%
  mutate(temp = paste0("CRIME", row_number())) %>%
  tidyr::pivot_wider(names_from = temp, values_from = CRIME)

#    PROCESS NAME       DATE       CRIME1  CRIME2   CRIME3 
#      <dbl> <fct>      <fct>      <fct>   <fct>    <fct>  
#1 180022121 A_NONIMATO 02/01/2018 ART.33  ART.33   NA     
#2 180022105 C_NONIMATO 01/01/2018 ART.35  ART.33   NA     
#3 180022097 D_NONIMATO 01/01/2018 ART.155 ART.155  ART.155
#4 180022501 G_NONIMATO 02/01/2018 ART.157 ART.14CP NA     

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-10-14
    • 1970-01-01
    • 1970-01-01
    • 2021-10-16
    • 1970-01-01
    • 2019-11-28
    • 1970-01-01
    相关资源
    最近更新 更多