R: 如何避免合并两个数据框(group by/summarise)时出现错误?

R: How do I avoid getting an error when merging two data frames (group by/summarise)?

我有 80,000 行的大 data frame。它是由来自不同年份的个人 data frames 组合而成。 origin 变量表示条目原始 data frame.

的年份

这里是 data frame 大行中前几行的示例,显示了 2003 年和 2011 年的数据帧是如何组合的。

df_1:
ID City State origin
1  NY   NY    2003 
2  NY   NY    2003
3  SF   CA    2003
1  NY   NY    2011
3  SF   CA    2011
2  NY   NY    2011
4  LA   CA    2011
5  SD   CA    2011

现在我想创建一个名为 first_appearance 的新变量,它为每个 ID:

获取 origin 变量的 min
final_df:
ID City State     origin   first_appearance
    1  NY   NY    2003     2003
    2  NY   NY    2003     2003
    3  SF   CA    2003     2003
    1  NY   NY    2011     2003
    3  SF   CA    2011     2003
    2  NY   NY    2011     2003
    4  LA   CA    2011     2011
    5  SD   CA    2011     2011

到目前为止,我已经尝试使用:

prestep_final <- df_1 %>% group_by(ID) %>% summarise(first_apperance = min(origin))
final_df <- merge(prestep_final, df_1, by = "ID")

Prestep_final 工作并产生 data frameIDfirst_appearance.

不幸的是,merge 步骤不起作用,生成的 data frame 仅包含 NA 条目。

我怎样才能改进我的代码,以便我可以生成像上面的 final_df 这样的 table。如果有任何建议,我将不胜感激,但我没有套餐偏好。

如果将 summarise 更改为 mutate,则无需合并即可获得所需的结果:

library(tidyverse)

df <- tibble::tribble(
  ~ID, ~City, ~State, ~origin,
    1,  'NY',   'NY',    2003, 
    2,  'NY',   'NY',    2003,
    3,  'SF',   'CA',    2003,
    1,  'NY',   'NY',    2011,
    3,  'SF',   'CA',    2011,
    2,  'NY',   'NY',    2011,
    4,  'LA',   'CA',    2011,
    5,  'SD',   'CA',    2011
)

df %>% group_by(ID) %>% 
  mutate(first_appearance = min(origin))
#> # A tibble: 8 x 5
#> # Groups:   ID [5]
#>      ID City  State origin first_appearance
#>   <dbl> <chr> <chr>  <dbl>            <dbl>
#> 1     1 NY    NY      2003             2003
#> 2     2 NY    NY      2003             2003
#> 3     3 SF    CA      2003             2003
#> 4     1 NY    NY      2011             2003
#> 5     3 SF    CA      2011             2003
#> 6     2 NY    NY      2011             2003
#> 7     4 LA    CA      2011             2011
#> 8     5 SD    CA      2011             2011

reprex package (v0.3.0)

于 2020 年 6 月 10 日创建

选项data.table

library(data.table)
setDT(df)[, first_appearance := min(origin), ID]

或在base R

df$first_appearance <- with(df, ave(origin, ID, FUN = min))