假設我有兩個資料框
df1 <- data.frame(n = rep(n = 2,c(0,1,2,3,4)), nn =c(rep(x = 1, 5), rep(x=2, 5)),
y = rnorm(10), z = rnorm(10))
df2 <- data.frame(x = rnorm(20))
這是第一個 df:
> head(df1)
n nn y z
1 0 1 1.5683647 0.48934096
2 1 1 1.2967556 -0.77891030
3 2 1 -0.2375963 1.74355935
4 3 1 -1.2241501 -0.07838729
5 4 1 -0.3278127 -0.97555379
6 0 2 -2.4124503 0.07065982
這是第二個 df:
x
1 -0.4884289
2 0.9362939
3 -1.0624084
4 -0.9838209
5 0.4242479
6 -0.4513135
我想從 df1 的 z 列值減去 df2 的 x 列值。并回傳減去值大約等于 df1 的 y 值的兩個資料幀的行。有沒有辦法構造這樣的函式,以便我可以暗示值應該相等的近似值?所以,很明顯,我想從所有 z 值中減去所有 x 值,然后將該值與 df1 的 y 列值進行比較,并檢查是否有與 y 近似匹配的值。
uj5u.com熱心網友回復:
這是一種方法,我將 的每一行df1與 的每一行進行匹配df2,然后從 z 中取出 x 和 y(正如您將 zx 與 y 進行比較的邏輯所暗示的那樣;這與將 zxy 與零進行比較相同)。最后,我查看 df1 的每一行,并保持絕對差值最低的匹配。
library(dplyr)
left_join(
df1 %>% mutate(dummy = 1, row = row_number()),
df2 %>% mutate(dummy = 1, row = row_number()), by = "dummy") %>%
mutate(diff = z - x - y) %>%
group_by(row.x) %>%
slice_min(abs(diff)) %>%
ungroup()
結果(我set.seed(42)在生成df1 之前使用過df2。)
# A tibble: 10 x 9
n nn y z dummy row.x x row.y diff
<dbl> <dbl> <dbl> <dbl> <dbl> <int> <dbl> <int> <dbl>
1 0 1 1.37 1.30 1 1 0.0361 20 -0.102
2 1 1 -0.565 2.29 1 2 1.90 5 0.956
3 2 1 0.363 -1.39 1 3 -1.76 8 0.0112
4 3 1 0.633 -0.279 1 4 -0.851 18 -0.0607
5 4 1 0.404 -0.133 1 5 -0.609 14 0.0713
6 0 2 -0.106 0.636 1 6 0.705 12 0.0372
7 1 2 1.51 -0.284 1 7 -1.78 2 -0.0145
8 2 2 -0.0947 -2.66 1 8 -2.41 19 -0.148
9 3 2 2.02 -2.44 1 9 -2.41 19 -2.04
10 4 2 -0.0627 1.32 1 10 1.21 4 0.168
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/358108.html
標籤:r
上一篇:如何將資料集重組為單列
