代码之家  ›  专栏  ›  技术社区  ›  elliot

将数据映射到数据帧中的列的更好方法?

  •  2
  • elliot  · 技术社区  · 6 年前

    我有几个需要合并的大型数据帧,有时添加一个唯一的可识别列来合并它们。我使用这种方法,这是可行的,但似乎需要很长时间。基本上,使用 dplyr 我抓住了 distinct 返回变量,然后 mutate 每个变量都有一个新的变量,然后 merge 该变量返回到原始数据帧。有更好的方法来完成这一点吗?

    df <- tibble(
      x = rep(LETTERS, 10)
    )
    
    
    df %>% 
      distinct(x) %>% 
      mutate(y = 1:nrow(.)) %>% 
      right_join(df)
    
    2 回复  |  直到 6 年前
        1
  •  3
  •   akrun    6 年前

    我们可以使用 match

    library(dplyr)
    df %>% 
        mutate(y = match(x, unique(x)))
    

    或与 factor

    df %>% 
        mutate(y = as.integer(factor(x, levels = unique(x))))
    

    或与 group_indices

    df %>%
       mutate(y = group_indices(., x))
    
        2
  •  1
  •   dww Jarretinha    6 年前

    正如您没有指定是否需要dplyr,这里有一个data.table方法:

    setDT(df)[, y := .GRP, by=x]
    

    或者在R基,简单地说

    df$y = as.integer(factor(df$x))