如何根据一个数据帧中的列值和r中另一个数据帧的列标题名称有条件地创建新列(代码片段)

author author     2022-12-28     724

关键词:

我有一个数据框df1,它有一个名为averageDate的列,其中包含日期,格式为%Y-%m。

我有另一个数据框df2,其中大多数列名称是日期值,格式为%Y-%m,这些列中的数据是经济指标的数值。

我想在df1中填充一个新列(在df3中显示),其中值是在df2中找到的值,其中df`中的averageDate值与df2中的列名匹配。

我已经成功解决了基于单独数据帧中两列的条件合并以解决先前的问题,但我在这里坚持的是第二个匹配条件是df2中的列名。

我的数据帧的再现如下所示:

df1 <- structure(list(zipcode = structure(c(1L, 2L, 4L, 3L), .Label = c("10019", 
"10027", "20009", "94117"), class = "factor"), averageDate = c("2017-08", 
"2017-04", NA, "2015-11")), .Names = c("zipcode", "averageDate"
), row.names = c(NA, -4L), class = c("tbl_df", "tbl", "data.frame"
))

df2 <-structure(list(RegionName = c(20009, 10019, 10027), `2015-01` = c(444500, 
1855000, NA), `2015-02` = c(439000, 1715000, NA), `2015-03` = c(437000, 
1775000, NA), `2015-04` = c(475000, 1855000, NA), `2015-05` = c(489000, 
1860000, NA), `2015-06` = c(489750, 1877500, NA), `2015-07` = c(479900, 
1957500, NA), `2015-08` = c(489900, 1950000, NA), `2015-09` = c(5e+05, 
1947500, NA), `2015-10` = c(512450, 1958000, NA), `2015-11` = c(503999.5, 
1990000, NA), `2015-12` = c(499900, 1995000, NA), `2016-01` = c(499500, 
1995000, NA), `2016-02` = c(529900, 1822500, NA), `2016-03` = c(5e+05, 
1820000, 872000), `2016-04` = c(5e+05, 1930000, 887000), `2016-05` = c(492500, 
1795500, 837000), `2016-06` = c(529000, 1750000, 819000), `2016-07` = c(549000, 
1832500, 725800), `2016-08` = c(577000, 1850000, 725000), `2016-09` = c(549900, 
1762500, 753500), `2016-10` = c(529000, 1777500, 737900), `2016-11` = c(519000, 
1787000, 750000), `2016-12` = c(499000, 1795000, 725800), `2017-01` = c(549000, 
1795000, 749000), `2017-02` = c(522450, 1833000, 845000), `2017-03` = c(546950, 
1836500, 867250), `2017-04` = c(572247.5, 1849450, 929000), `2017-05` = c(549900, 
1850000, 929000), `2017-06` = c(540000, 1875000, 899000), `2017-07` = c(519900, 
1895000, 899000), `2017-08` = c(525000, 1849990, 897000), `2017-09` = c(572450, 
1795000, 840000), `2017-10` = c(595000, 1795000, 882000), `2017-11` = c(555650, 
1825000, 949000), `2017-12` = c(525000, 1799950, 795000), `2018-01` = c(557000, 
1925000, 772500)), .Names = c("RegionName", "2015-01", "2015-02", 
"2015-03", "2015-04", "2015-05", "2015-06", "2015-07", "2015-08", 
"2015-09", "2015-10", "2015-11", "2015-12", "2016-01", "2016-02", 
"2016-03", "2016-04", "2016-05", "2016-06", "2016-07", "2016-08", 
"2016-09", "2016-10", "2016-11", "2016-12", "2017-01", "2017-02", 
"2017-03", "2017-04", "2017-05", "2017-06", "2017-07", "2017-08", 
"2017-09", "2017-10", "2017-11", "2017-12", "2018-01"), row.names = c(38L, 
82L, 226L), class = "data.frame")

df3 <- structure(list(RegionName = c("10019", "10027", "20009", "94117"
    ), variable = structure(c(32L, 28L, 11L, NA), .Label = c("2015-01", 
    "2015-02", "2015-03", "2015-04", "2015-05", "2015-06", "2015-07", 
    "2015-08", "2015-09", "2015-10", "2015-11", "2015-12", "2016-01", 
    "2016-02", "2016-03", "2016-04", "2016-05", "2016-06", "2016-07", 
    "2016-08", "2016-09", "2016-10", "2016-11", "2016-12", "2017-01", 
    "2017-02", "2017-03", "2017-04", "2017-05", "2017-06", "2017-07", 
    "2017-08", "2017-09", "2017-10", "2017-11", "2017-12", "2018-01"
    ), class = "factor"), value = c(1849990, 929000, 503999.5, NA
    )), .Names = c("RegionName", "variable", "value"), row.names = c(NA, 
    -4L), class = "data.frame")
答案

像这样的东西?

require(tidyverse);
left_join(
    df1,
    df2 %>%
        gather(averageDate, Value, 2:ncol(df2)) %>%
        rename(zipcode = RegionName) %>%
        mutate(zipcode = as.character(zipcode)))
## A tibble: 4 x 3
#  zipcode averageDate   Value
#  <chr>   <chr>         <dbl>
#1 10019   2017-08     1849990
#2 10027   2017-04      929000
#3 94117   NA               NA
#4 20009   2015-11      504000
另一答案

从@Marko的见解

long <-melt(df2, id.vars = "RegionName")

df3 <- merge(long, df1, by.x=c("RegionName", "variable"), by.y=c("zipcode", "averageDate"), all.y=T)

如何根据数据框中的列值获取特定的行数[重复]

】如何根据数据框中的列值获取特定的行数[重复]【英文标题】:Howtogetspecificnumberofrowsbasedoncolumnvaluesindataframe[duplicate]【发布时间】:2018-04-0206:30:02【问题描述】:假设我以这种方式拥有一个MNIST数据集。df=pd.read_csv(\'data/train.csv\... 查看详情

如何对一个数据框中的列值求和并将结果添加为另一个数据框中的列?

】如何对一个数据框中的列值求和并将结果添加为另一个数据框中的列?【英文标题】:Howtosumvaluesofcolumninonedataframeandaddresultsasacolumninanotherdataframe?【发布时间】:2021-08-1923:41:10【问题描述】:我的主要数据框的一个例子是这样... 查看详情

根据火花数据框scala中的列值过滤行

】根据火花数据框scala中的列值过滤行【英文标题】:Filteringrowsbasedoncolumnvaluesinsparkdataframescala【发布时间】:2016-04-0215:13:50【问题描述】:我有一个数据框(火花):idvalue303130414040我想创建一个新的数据框:303141需要为每个id... 查看详情

根据另一个表中的列值检索列值

】根据另一个表中的列值检索列值【英文标题】:retrievecolumnvaluebasedoncolumnvalueinanothertable【发布时间】:2021-12-3118:59:46【问题描述】:我有两张桌子:表1第2章Tbl2包含用户在Tbl1中执行的交易。表格包含类似以下屏幕截图的数据... 查看详情

根据 C#2.0 中的列值过滤 DataTable 行

...据只有一个字符值为“*”的列过滤行。我的版本是C#2.0。如何过滤行并复制到新的数据表中。此代码无效;DataTableresult=dt.Select("FLAG=\'*\'");【问题 查看详情

检测列值是不是包含在 SQL Server 中另一个表的列中的最佳方法

】检测列值是不是包含在SQLServer中另一个表的列中的最佳方法【英文标题】:Bestwaytodetectifacolumnvalueisincludedinanothertable\'scolumninSQLServer检测列值是否包含在SQLServer中另一个表的列中的最佳方法【发布时间】:2020-03-1917:50:15【问题... 查看详情

R:从一个数据帧中提取行,基于列名匹配来自另一个数据帧的值

...ame【发布时间】:2019-06-1717:46:41【问题描述】:我想知道如何根据数据框A中的某些列名提取数据框一列中的值(数据框A),其中包含来自另一数据的多列的值框架(数据框架B)。更具体地说。我有两 查看详情

Pyspark - 如何将多个数据帧的列连接成一个数据帧的列

】Pyspark-如何将多个数据帧的列连接成一个数据帧的列【英文标题】:Pyspark-Howtoconcatenatecolumnsofmultipledataframesintocolumnsofonedataframe【发布时间】:2019-05-0617:20:14【问题描述】:我有一列有多个数据框(总共24个)。我需要将所有这... 查看详情

如何根据 azure databricks 中的列值将静态值传递给动态值

】如何根据azuredatabricks中的列值将静态值传递给动态值【英文标题】:howtopassstaticvalueintodynamiconbasisofcolumnvalueinazuredatabricks【发布时间】:2021-12-0110:55:23【问题描述】:如何根据azure数据砖中的列值将静态值传递给动态值目前,... 查看详情

按 R 中的列值过滤列表中的每个数据框

...nvalueinR【发布时间】:2020-01-3010:32:03【问题描述】:我有一个包含18个数据框的列表,它们看起来都类似于:GeneIDHMMERHotpepDIAMOND#ofToolsactino_5_2__00070GT20(2-473)GT20(5)GT203actino_5_2__00270CE1(6 查看详情

如何根据jQuery数据表中的列值设置表行的颜色

】如何根据jQuery数据表中的列值设置表行的颜色【英文标题】:HowtosetcolorfortablerowsbasedoncolumnvalueinjQuerydatatable【发布时间】:2013-04-2712:50:28【问题描述】:我正在使用jQuery数据表。我有如下数据Column1Column2Column3-----------------------A... 查看详情

如何根据 Teradata 中的列值复制表行?

】如何根据Teradata中的列值复制表行?【英文标题】:HowtoduplicatetablerowbasedoncolumnvalueinTeradata?【发布时间】:2021-08-2623:34:11【问题描述】:有人可以帮助完成这项任务吗?如果我在Teradata中有一个如下表:caseidcontentrepeatid1row12id2ro... 查看详情

根据组中的一行更新组中的列值

】根据组中的一行更新组中的列值【英文标题】:Updatecolumnvaluesinagroupbasedononerowinthatgroup【发布时间】:2021-11-0511:04:41【问题描述】:我有一个来自源数据的数据框,类似于以下内容:In[1]:df=pd.DataFrame(\'test_group\':[1,1,1,2,2,2,3,3,3],\... 查看详情

根据 R 中的列名创建一个新数据框,其中包含来自另一个数据框的列

】根据R中的列名创建一个新数据框,其中包含来自另一个数据框的列【英文标题】:createanewdataframewithcolumnsfromanotherdataframebasedoncolumnnamesinR【发布时间】:2019-12-1214:05:04【问题描述】:数据框A存在。我想创建数据框B并在数据框B... 查看详情

熊猫,我怎样才能避免使用 iterrow (如何根据来自另一个数据帧的值将值分配给数据帧中的新列)

】熊猫,我怎样才能避免使用iterrow(如何根据来自另一个数据帧的值将值分配给数据帧中的新列)【英文标题】:Pandas,howcanIavoidtheuseofiterrow(howtoassignvaluestoanewcolumninadataframebasedonthevaluesfromanotherdataframe)【发布时间】:2020-02-1911:58... 查看详情

用另一个表中的列值替换列的空值

...表B。我正在对两个表中的一个公共列进行内部联接,并根据不同的条件创建另外两个新列。下面是一个示例数据集:表A|Id|StartDate||-----|------------||119|01-01-2 查看详情

如何遍历 spark 数据集并更新 Java 中的列值?

】如何遍历spark数据集并更新Java中的列值?【英文标题】:HowtoiteratethroughasparkdatasetandupdateacolumnvalueinJava?【发布时间】:2018-03-2022:21:39【问题描述】:我正在开发POC,我必须使用令牌更新数据库中的帐号。我将数据读入数据集dsR... 查看详情

根据 Presto/Hive 中的列值聚合列

】根据Presto/Hive中的列值聚合列【英文标题】:AggregatingacolumnbasedoncolumnvaluesinPresto/Hive【发布时间】:2018-11-0712:52:03【问题描述】:我正在尝试创建一个数据集,在其中我根据另一列的值聚合一列。举个例子id|score|id2|offensive-------... 查看详情