r结合3个数据框并执行操作

发布于 2025-02-14 00:36:32 字数 4398 浏览 2 评论 0原文

我有3个具有不同行号的数据范围。我想根据第三个数据框中的行值对2个数据范围进行一些操作。 数据帧1:


+--------------------------+
| V1   Particlei Particlej |
+--------------------------+
| <chr>   <dbl>   <dbl>    |
| 1 conf10   6   1829      |
| 2 conf10   6   13928     |
| 3 conf10   8   2875      |
| 4 conf10   8   13765     |
| 5 conf10   9   3184      |
| 6 conf10   9   11139     |
+--------------------------+

数据框2


+----------+----------+------------+-------------+
|    V1    |  cluster | position.x |  position.y |
+----------+----------+------------+-------------+
| <chr>    | <dbl>    |   <dbl>    |   <dbl>     |
| 1 conf10 | 6        | 0.000659   | 0.00932     |
| 2 conf10 | 8        | 0.0291     |  0.00922    |
| 3 conf10 | 10       | 0.0101     |   0.00380   |
| 4 conf10 | 12       | -0.0103    |  0.00379    |
| 5 conf10 | 14       |  0.0165    |  0.000900   |
| 6 conf10 | 16       | -0.000554  |   0.0112    |
+----------+----------+------------+-------------+

和数据框3


+----------+----------+--------------------+------------+
|    V1    | cluster  |    position.x      | position.y |
+----------+----------+--------------------+------------+
| <chr>    | <dbl>    |    <dbl>           |   <dbl>    |
| 1 conf9  |    7     | -0.0104            | 0.000920   |
| 2 conf9  |    9     |  -0.00426   0.0139 |            |
| 3 conf9  |   11     |   0.0249           | 0.0164     |
| 4 conf9  |   13     |  -0.0146           | 0.00242    |
| 5 conf9  |   15     |  -0.0176           | 0.00220    |
| 6 conf9  |   17     |  -0.0183           | 0.00620    |
+----------+----------+--------------------+------------+

我想根据Data1值进行行明智的操作。例如,如果列中的值prentaryearthsj在列中cluster> cluster数据2和 3。检测到值是否存在后,然后对数据和3中的行执行一些操作。例如,对于Data1中的第1行,我有6和1829,因此我想在cluster中选择行数据2和3具有6和1829,在选择了两个选定行的数据2中的data2 data3的减去列之后。类似地减去data2的data3的 y position.y

  for(i in row_number(data3)){
    y <- data1 %>% filter(any(data3[,1:2]==data2$cluster))
    if(any(data2$cluster==data3[,1:2])){
       while(any(data2$cluster==data3[,1])){
          delta_x = data2$position.x-data1$position.x
          delta_y = data2position.y-data1$position.y
  }
}

期望输出


+---------------+------------+-------------------+-------------------+------------------+------------------+-----------+-------------------------------------------------+-----------+-----------+
|             |            |                   |                   |                  |                  |           |                                                 |          |           |
|    V1       |     cluster| position.x_data3  | position.y_data3  | position.x_data2 | position.y_data2 | delta.x   | delta.y                                         | particlei | particlej |
| +---------+ |            |                   |                   |                  |                  |           |                                                 |           |           |
|  <chr>      | <dbl>      |  <dbl>            |   <dbl>           | <dbl>            | <dbl>            |  <dbl>    | <dbl>                                           |           |           |
|  1 conf9,10    | 6          | -0.0104           | 0.000920          | 0.000659         |  0.00932         | -0.011059 | -0.0084                                         | 6         | 1829     |
|  2 conf9,10    | 1829       |  -0.00426         | 0.0139            |  0.000659        | 0.000659         | 0.000659  | 0.000575                                        | 6         | 1829      |
|  3 conf9,10    |  7        |   0.0249          |  0.0164           | ...              | ,...             | ...       | some values subtracted between position columns | 7         | 13928     |
|  4 conf9,10    | 13928      |  -0.0146          |  0.00242          |  some values     | some values      | ...       | ...                                             | 7         | 13928     |
+---------------+------------+-------------------+-------------------+------------------+------------------+-----------+-------------------------------------------------+-----------+-----------+

I have 3 dataframes which have different row numbers. I want to perform some operation on 2 dataframes based on row values in third dataframe.
dataframe 1:


+--------------------------+
| V1   Particlei Particlej |
+--------------------------+
| <chr>   <dbl>   <dbl>    |
| 1 conf10   6   1829      |
| 2 conf10   6   13928     |
| 3 conf10   8   2875      |
| 4 conf10   8   13765     |
| 5 conf10   9   3184      |
| 6 conf10   9   11139     |
+--------------------------+

dataframe 2


+----------+----------+------------+-------------+
|    V1    |  cluster | position.x |  position.y |
+----------+----------+------------+-------------+
| <chr>    | <dbl>    |   <dbl>    |   <dbl>     |
| 1 conf10 | 6        | 0.000659   | 0.00932     |
| 2 conf10 | 8        | 0.0291     |  0.00922    |
| 3 conf10 | 10       | 0.0101     |   0.00380   |
| 4 conf10 | 12       | -0.0103    |  0.00379    |
| 5 conf10 | 14       |  0.0165    |  0.000900   |
| 6 conf10 | 16       | -0.000554  |   0.0112    |
+----------+----------+------------+-------------+

and dataframe 3


+----------+----------+--------------------+------------+
|    V1    | cluster  |    position.x      | position.y |
+----------+----------+--------------------+------------+
| <chr>    | <dbl>    |    <dbl>           |   <dbl>    |
| 1 conf9  |    7     | -0.0104            | 0.000920   |
| 2 conf9  |    9     |  -0.00426   0.0139 |            |
| 3 conf9  |   11     |   0.0249           | 0.0164     |
| 4 conf9  |   13     |  -0.0146           | 0.00242    |
| 5 conf9  |   15     |  -0.0176           | 0.00220    |
| 6 conf9  |   17     |  -0.0183           | 0.00620    |
+----------+----------+--------------------+------------+

I want to do row wise operation based on data1 values. For example I want to check that for each row in data1 if the values in columns Particlei and particlej are present in column cluster of data 2 and 3. After detecting if the values are present then perform some operations on rows in data2 and 3. For example for row number 1 in data1 I have 6 and 1829 so I want to select rows in column cluster in data2 and 3 which have 6 and 1829 and after selecting subtract column position.x of data3 from data2 for the two selected rows. similarly subtract column position.y of data3 from data2. do all these operations row wise. What I did till now

  for(i in row_number(data3)){
    y <- data1 %>% filter(any(data3[,1:2]==data2$cluster))
    if(any(data2$cluster==data3[,1:2])){
       while(any(data2$cluster==data3[,1])){
          delta_x = data2$position.x-data1$position.x
          delta_y = data2position.y-data1$position.y
  }
}

expected output


+---------------+------------+-------------------+-------------------+------------------+------------------+-----------+-------------------------------------------------+-----------+-----------+
|             |            |                   |                   |                  |                  |           |                                                 |          |           |
|    V1       |     cluster| position.x_data3  | position.y_data3  | position.x_data2 | position.y_data2 | delta.x   | delta.y                                         | particlei | particlej |
| +---------+ |            |                   |                   |                  |                  |           |                                                 |           |           |
|  <chr>      | <dbl>      |  <dbl>            |   <dbl>           | <dbl>            | <dbl>            |  <dbl>    | <dbl>                                           |           |           |
|  1 conf9,10    | 6          | -0.0104           | 0.000920          | 0.000659         |  0.00932         | -0.011059 | -0.0084                                         | 6         | 1829     |
|  2 conf9,10    | 1829       |  -0.00426         | 0.0139            |  0.000659        | 0.000659         | 0.000659  | 0.000575                                        | 6         | 1829      |
|  3 conf9,10    |  7        |   0.0249          |  0.0164           | ...              | ,...             | ...       | some values subtracted between position columns | 7         | 13928     |
|  4 conf9,10    | 13928      |  -0.0146          |  0.00242          |  some values     | some values      | ...       | ...                                             | 7         | 13928     |
+---------------+------------+-------------------+-------------------+------------------+------------------+-----------+-------------------------------------------------+-----------+-----------+

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文