Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/84.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 - Fatal编程技术网

R 在数据帧中添加新列,对来自另一个数据帧的行进行计数

R 在数据帧中添加新列,对来自另一个数据帧的行进行计数,r,R,已在论坛上搜索解决方案,但找不到 我有一个数据框(df1)中的公司财务数据和另一个数据框(df2)中的收购数据。数据格式如下所示 df1 <- data.frame(ID=c('111111','111111', '222222', '333333', '444444'), year=c(2010, 2011, 2010, 2011, 2011)) df2 <- data.frame(ID=c('111111', '111111', '111111', '

已在论坛上搜索解决方案,但找不到

我有一个数据框(df1)中的公司财务数据和另一个数据框(df2)中的收购数据。数据格式如下所示

df1 <- data.frame(ID=c('111111','111111', '222222', '333333', '444444'),
              year=c(2010, 2011, 2010, 2011, 2011))
df2 <- data.frame(ID=c('111111', '111111', '111111', '111111', '333333'),
              year=c(2010,2010,2010,2011,2011))´
我真的试图想出一个解决办法,但还不够接近。希望有人能解决这个问题


提前谢谢你

最好的方法可能是使用left_join,您只需将NA更改为0:

df1和df2
df1%>%左联合(总和df2)
#>加入,由=c(“ID”,“年”)
#>警告:“ID”列将不同级别的因子连接在一起,强制为
#>特征向量
#>身份证年份n
#> 1 111111 2010  3
#> 2 111111 2011  1
#>3222222010北美
#> 4 333333 2011  1
#>544444 2011北美
由(v0.2.1)于2019-01-29创建


连锁经营 @Ronak Shah添加了以下评论

df1%
右联合(df1)%>%
替换(列表(n=0))
#>加入,由=c(“ID”,“年”)
#>警告:“ID”列将不同级别的因子连接在一起,强制为
#>特征向量
#>#tibble:5 x 3
#>身份证年份n
#>      
#> 1 111111  2010     3
#> 2 111111  2011     1
#> 3 222222  2010     0
#> 4 333333  2011     1
#> 5 444444  2011     0

由(v0.2.1)非tidyverse溶液于2019-01-29创建。我知道这似乎比tidyverse更复杂,只是分享了多种选择

df1 5 444444 2011 0

由(v0.2.1)创建于2019-01-29。谢谢,这很有帮助。然而,似乎仅此代码无法将新列“n”添加到数据帧df1中。是否有一个快速的解决方案?考虑阅读LefftJoin和RealthIn文档。在第一个示例中,left_join函数保留df1中的所有值,并添加仅存在于df2中的列“n”。在“单链解决方案”中,诀窍是使用右连接,它也保留df1并添加“n”列。您不能简单地将n列添加到df1,因为有些值在df1中不存在。“您不能简单地将n列添加到df1,因为有些值在df1中不存在”实际上,您正在使用df1中的相同值创建一个data.frame,并添加一个与创建“n”相同的新列“n”df1中的列…如果您认为您的问题已经解决,请检查其回答:)
#output should look like following in df1
# ID      year  count of observations in df2 per year
# 111111  2010  3
# 111111  2011  1
# 222222  2010  0
# 333333  2011  1
# 444444  2011  0