Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/65.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R:合并两个数据帧(分组/汇总)时如何避免出错?_R_Group By_Merge_Summarize - Fatal编程技术网

R:合并两个数据帧(分组/汇总)时如何避免出错?

R:合并两个数据帧(分组/汇总)时如何避免出错?,r,group-by,merge,summarize,R,Group By,Merge,Summarize,我有一个80000行的大数据帧。它是通过结合不同年份的单个数据框架创建的。origin变量表示条目原始数据框的年份 下面是前几个大数据框架行的示例,显示了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

我有一个80000行的大数据帧。它是通过结合不同年份的单个数据框架创建的。origin变量表示条目原始数据框的年份

下面是前几个大数据框架行的示例,显示了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获取原始变量的最小值:

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

prestep_final <- df_1 %>% group_by(ID) %>% summarise(first_apperance = min(origin))
final_df <- merge(prestep_final, df_1, by = "ID")
Prestep_最终工作并生成具有ID和第一个_外观的数据帧

不幸的是,合并步骤不起作用,只生成一个包含NA条目的数据帧

如何改进我的代码,以便生成类似上面final_df的表。如果您有任何建议,我将不胜感激,并且没有软件包首选项。

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

图书馆管理员 df%组\u字节ID%>% 变异第一次出现=minorigin >一个tibble:8x5 >组别:ID[5] >ID城市国家起源第一次出现 > >2003年11月1日纽约 >2 2003年纽约州纽约市 >3.3平方英尺CA 2003 >2011年4月1日纽约州2003年 >5.3平方英尺CA 2011 2003 >6.2纽约市2011年2003年 >7.4拉卡2011 >8.5 SD CA 2011 由v0.3.0于2020年6月10日创建,如果将摘要更改为变异,则无需合并即可获得所需结果:

图书馆管理员 df%组\u字节ID%>% 变异第一次出现=minorigin >一个tibble:8x5 >组别:ID[5] >ID城市国家起源第一次出现 > >2003年11月1日纽约 >2 2003年纽约州纽约市 >3.3平方英尺CA 2003 >2011年4月1日纽约州2003年 >5.3平方英尺CA 2011 2003 >6.2纽约市2011年2003年 >7.4拉卡2011 >8.5 SD CA 2011 于2020-06-10由v0.3.0创建,带有数据表的选项

或者在R底

带有data.table的选项

或者在R底


谢谢你,@MarBio!谢谢你,@MarBio!这是一个非常巧妙的解决方案。谢谢@akrun!这是一个非常巧妙的解决方案。谢谢@akrun!
prestep_final <- df_1 %>% group_by(ID) %>% summarise(first_apperance = min(origin))
final_df <- merge(prestep_final, df_1, by = "ID")
library(data.table)
setDT(df)[, first_appearance := min(origin), ID]
df$first_appearance <- with(df, ave(origin, ID, FUN = min))