首页 > 解决方案 > 基于R数据帧之间匹配条件的操作

问题描述

我有以下数据框:

head(RH)
  160143 161143 161144 161145 161146 162145 162146 162147 163146 163147
1   24.9   26.4   27.4   28.5   30.4   29.2   32.6   58.7   50.6   62.1
2   10.6   29.4   29.3   29.5   30.3   29.7   33.0   68.2   53.2   82.3
3   17.7   30.7   30.7   31.7   31.5   29.4   34.1   65.0   48.0   78.5
4   39.2   38.6   41.0   37.5   29.0   31.1   36.4   56.4   89.7   83.9
5   23.1   23.0   27.9   29.9   38.2   29.6   41.4   88.2   86.0   91.2
6   27.7   28.1   38.5   40.7   50.8   43.3   56.7  106.6   72.5   94.2


head(percentage)
      xy     perc
1 160143 50.22337
2 161143 29.69779
3 107167 41.98815
4 107168 66.68095
5 107169 37.67827
6 108167 29.69238

我想将 RH 列乘以 perc 列的值,当 RH 的列名与 perc 的 xy 列匹配时(即列 160843 应全部乘以 50.22337,列 161143 应乘以 29.69779 等... (在示例中没有更多匹配项,但百分比数据框的 xy 列包含 RH 列名称中的所有可能值)。

结果应该是一个与 RH 相同维度的数据框。

标签: rdataframematchconditional-statements

解决方案


您可以提取现有列的比例因子:

foo <- percentage$perc[match(colnames(RH), percentage$xy)]
# [1] 50.22337 29.69779       NA       NA       NA       NA       NA       NA       NA       NA

1并在其中插入NA(即,其他列将乘以1):

t(t(RH) * ifelse(is.na(foo), 1, foo))

推荐阅读