如何根据单独数据框中的两列结果在数据框中创建新列?

埃文

我有一个df1:

   ZIP Weekend Sales
1 60657       1    2
2 60657       1    1
3 60657       1    1
4 60641       0    2
5 60641       0    NA
6 60607       0    0
7 60607       0    1
8 60628       0    1

还有一个单独的df2:

    ZCTA   ZIP Population
6  60657 60657      82739
7  60609 60609      64906
10 60612 60612      33472
13 60641 60641     40603
14 60616 60616      48433
15 60607 60607      84155
16 60628 60628      92084
17 60619 60619      63825

我想对df2附加两列。一栏将是SalesSum。我想总结每个邮政编码的总销售得分,如下所示:

输出:

    ZCTA   ZIP Population   Sales
6  60657 60657      82739    4
7  60609 60609      64906    0
10 60612 60612      33472    0 
13 60641 60641      40603    2
14 60616 60616      48433    0
15 60607 60607      84155    1
16 60628 60628      92084    1
17 60619 60619      63825    0

怎么做?

丹尼尔·奥(Daniel O)

在Base-R中

SalesByZip <- sapply(split(df1$Sales,df1$ZIP), sum)
df2$Sales <- lapply(df2$ZIP, function(x) SalesByZip[grepl(x, names(SalesByZip))] )


> df2
    ZCTA   ZIP Population Sales
6  60657 60657      82739     4
7  60609 60609      64906      
10 60612 60612      33472      
13 60641 60641      40603     2
14 60616 60616      48433      
15 60607 60607      84155     1
16 60628 60628      92084     1
17 60619 60619      63825      

编辑:

如果您希望零实际上位于列表中,只需添加

df2$Sales[sapply(df2$Sales,length)==0] <- 0


> df2
    ZCTA   ZIP Population Sales
6  60657 60657      82739     4
7  60609 60609      64906     0
10 60612 60612      33472     0
13 60641 60641      40603     2
14 60616 60616      48433     0
15 60607 60607      84155     1
16 60628 60628      92084     1
17 60619 60619      63825     0

说明:

SalesByZip <- sapply(split(df1$Sales,df1$ZIP), sum)在这里,我们使用来分割df1中的数据。split(df1$Sales,df1$ZIP)这仅返回用邮政编码分隔的销售额。然后将其包裹起来,sapply(..., sum)将每个分割相加。

现在,lapply(df2$ZIP, ... )这将一次将一行代码传递df2$ZIP到我们的函数中。function(x) SalesByZip[grepl(x, names(SalesByZip))]该函数正在访问SalesByZip与我们传递到函数中的ZIP匹配的对应值

发表评论:

以下解决方案添加了zereo,但没有上面添加的行,并确保class(df2$Sales)="numeric"

SalesByZip <- sapply(split(df1$Sales,df1$ZIP), sum)
df2$Sales <- sapply(df2$ZIP, function(x){x<-SalesByZip[grepl(x, names(SalesByZip))];ifelse(length(x)==0,0,x)} )

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何根据条件在数据框中创建新列

根据Groupby和单独列中的值在数据框中创建新列

如何根据数据框 B 中的多个条件在数据框 A 中创建新列

根据其他 3 列的结果在 R 数据框中创建新列

根据条件在数据框中创建新列

如何根据 Jupyter 中的现有列在数据框中创建新列?

如何根据其他列的条件在数据框中创建新列?

如何根据另一个数据框中的条件在数据框中创建新列?

如何根据条件在熊猫数据框中创建新列?

如何在数据框中创建一个新列,并根据前一列中结果的百分比将其设置为1或0?

根据现有列中的条件在数据框中创建新列

根据 R 中的其他列在数据框中创建新列

根据其他列中的答案选择在数据框中创建新列

如何根据 julia 中的其他列值有条件地在数据框中创建新列

语言:如何根据另一个数据框在数据框中创建新列?

根据csv字段在数据框中创建列

根据先前列中的最新值在数据框中创建新列

如何根据具有公共信息的不同数据框中另一列的值在数据框中创建新列?

遍历列表以在数据框中创建新列

使用Fuzzywuzzy在数据框中创建新列

在数据框pyspark中创建新的列和行

使用列值在数据框中创建新行

以迭代方式在数据框中创建多个新列

根据多个列中的值创建新的数据框列

根据与另一个数据框的匹配在数据框中创建新列

根据开始日期和结束日期在数据框中创建新列

根据列的多个值在数据框中创建新行

R-根据条件在数据框中创建新列

如何根据单独数据框中的两列重新编码数据框中的值?