首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >根据匹配的列名查找值

根据匹配的列名查找值
EN

Stack Overflow用户
提问于 2021-07-20 22:55:02
回答 2查看 31关注 0票数 0

在数据框中,我有几个监测井的水压头的每日时序,单位是海平面以上几米。例如:

代码语言:javascript
运行
复制
hydraulic.head.mw = data.frame("date" = seq(as.Date("2020-01-01"), as.Date("2020-01-31."), by = "1 day"), "B51A1367" = rnorm(31, 11, 1), "B51A1368" = rnorm(31, 12, 1), "B51A1369" = rnorm(31, 10, 1))

在另一个数据框中,我有那些监测海平面以上的井的地面水平。例如:

代码语言:javascript
运行
复制
ground.levels = data.frame("B51A1369" = 12, "B51A1368" = 13, "B51A1367" = 11)

现在我想从存储在ground.levels中的ground level值中减去整个柱的水头B51A1367,这样我就得到了相对于地面的水头。在此列完成后,R移动到下一列,查找匹配的地面级别,减去,然后继续到下一列。

现在,我希望R基于匹配列名来实现这一点,而不是基于数字索引。因此,R从hydraulic.head.mw中的第一个列名开始,在ground.levels中查找相同的列名,获取适当的底层值(位于列标题下的第一个单元格中),并使用该数字减去hydraulic.head.mw from中该列中的所有值。然后R移动到下一列,直到所有列都通过。

我想知道如何实现这一点。谢谢。

EN

回答 2

Stack Overflow用户

发布于 2021-07-20 23:07:34

我希望这就是你所想的:

代码语言:javascript
运行
复制
library(dplyr)
library(purrr)

hydraulic.head.mw[1] %>%
  bind_cols(hydraulic.head.mw[-1] %>%
              imap_dfc(~ .x - ground.levels[[.y]]))

         date    B51A1367    B51A1368     B51A1369
1  2020-01-01 -0.46142021 -1.74871429 -2.452648793
2  2020-01-02  1.71382161  0.06047936 -2.234656944
3  2020-01-03 -0.11570839  0.12019048 -0.491225195
4  2020-01-04  0.05317141 -1.27937548 -1.744927525
5  2020-01-05  0.35258944 -0.92717032 -3.882610559
6  2020-01-06  0.57316511 -2.76092402 -4.535663871
7  2020-01-07 -1.00082886 -1.59522432 -2.890683663
8  2020-01-08 -1.35219506 -1.62313945 -1.477468554
9  2020-01-09  0.55320054 -0.89079517 -3.362480296
10 2020-01-10  0.08674063 -0.52586937  0.242346441
11 2020-01-11  1.37183428 -0.96520484 -2.793051770
12 2020-01-12 -0.63833081  0.75155974 -2.381431787
13 2020-01-13 -0.54790061 -0.34013724 -1.811665913
14 2020-01-14 -0.06519258 -1.20034125 -0.006102705
15 2020-01-15  1.21478696 -0.06604244 -1.225585795
16 2020-01-16  0.94666715 -1.87937005 -1.488483548
17 2020-01-17  0.75962640 -0.79240101 -2.351820061
18 2020-01-18 -1.79810493 -1.35113768 -1.126389832
19 2020-01-19  0.45044266 -0.57074678 -2.097019487
20 2020-01-20 -0.19429281  0.06355228 -2.525346388
21 2020-01-21  1.06640688 -0.43479347 -1.939315768
22 2020-01-22  0.62197062 -1.16977342 -1.228809026
23 2020-01-23  0.73909179 -0.29254173 -0.638173664
24 2020-01-24 -2.22778642 -0.12602574 -2.243869650
25 2020-01-25 -2.08132726  0.75559866 -2.613223931
26 2020-01-26  0.43944671 -2.19454589 -0.248829322
27 2020-01-27  1.02476483 -0.69068266 -1.910894847
28 2020-01-28 -0.80972940 -0.30956516 -2.864880165
29 2020-01-29 -0.64401921 -2.97380446 -2.831593140
30 2020-01-30  1.82055899 -1.30431603 -2.738413435
31 2020-01-31 -0.01449517  0.05918447 -3.253922936

或在base R

代码语言:javascript
运行
复制
cbind(hydraulic.head.mw[1], 
      mapply(function(x, y) {
        x - ground.levels[[y]]
      }, hydraulic.head.mw[-1], names(hydraulic.head.mw)[-1]))
票数 1
EN

Stack Overflow用户

发布于 2021-07-20 23:05:09

代码语言:javascript
运行
复制
# Creating a new data frame for relative values
hydraulic.head.rel <- hydraulic.head.mw

# Looping by column names of ground.levels
for (i in colnames(ground.levels)) {
  hydraulic.head.rel[,i] <-  hydraulic.head.rel[,i] - ground.levels[,i]
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68457062

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档