- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
数据和上下文优先:所讨论的数据是
set.seed(123)
df1 <- data.frame(A = rep(1, 4), B = c(2, 6, 4, 4), D = c(0.1, 0.2, 0.3, 0.4))
df2 <- data.frame(A = rep(1, 4), C = c(2, 4, 6, 4), D = c(0.5, 0.6, 0.7, 0.8))
所以我们有
> df1
A B D
1 1 2 0.1
2 1 6 0.2
3 1 4 0.3
4 1 4 0.4
和
> df2
A C D
1 1 2 0.5
2 1 4 0.6
3 1 6 0.7
4 1 4 0.8
现在,做的时候
merge(df1, df2, by.x = c("A", "B"), by.y = c("A", "C"))
一个人得到
A B D.x D.y
1 1 2 0.1 0.5
2 1 4 0.3 0.6
3 1 4 0.3 0.8
4 1 4 0.4 0.6
5 1 4 0.4 0.8
6 1 6 0.2 0.7
因为 (A,B) 和 (A,C) 值的组合不明确。
实际问题:如何通过将 D.x 和 D.y 随机分配给 (A,B) 来解决这个问题,例如得到同样的可能性
A B D.x D.y
1 1 2 0.1 0.5
2 1 4 0.3 0.6
5 1 4 0.4 0.8
6 1 6 0.2 0.7
和
A B D.x D.y
1 1 2 0.1 0.5
3 1 4 0.3 0.8
4 1 4 0.4 0.6
6 1 6 0.2 0.7
作为合并的结果?
最佳答案
使用 data.table 包,您可以按如下方式进行:
library(data.table)
DT <- dt1[dt2, on = c(A="A", B="C")][, .(i.D = sample(i.D,1)), by = .(A, B, D)]
这给出了两种可能的结果(多次运行上面的代码以查看不同的结果):
> DT
A B D i.D
1: 1 2 0.1 0.5
2: 1 4 0.3 0.6
3: 1 4 0.4 0.8
4: 1 6 0.2 0.7
或:
> DT
A B D i.D
1: 1 2 0.1 0.5
2: 1 4 0.3 0.8
3: 1 4 0.4 0.6
4: 1 6 0.2 0.7
虽然这个简单的解决方案可行,但效率较低(尤其是在内存使用方面)。导致相同结果的内存效率更高的解决方案是:
dt1[, indx := 1:.N, keyby = .(A, B)]
dt2[, indx := if(.N > 1L) sample(.N) else 1L, keyby = .(A, C)]
dt1[dt2, on = c(A = "A", B = "C", indx = "indx")]
通过在两个数据集中创建索引并为第二个数据集对该索引进行采样,您可以加入它。这防止了笛卡尔连接,在这种情况下,所有可能的组合首先都包含在连接中。
使用的数据:
dt1 <- data.table(A = rep(1, 4), B = c(2, 6, 4, 4), D = c(0.1, 0.2, 0.3, 0.4))
dt2 <- data.table(A = rep(1, 4), C = c(2, 4, 6, 4), D = c(0.5, 0.6, 0.7, 0.8))
在基础 R 中你可以这样做:
df12 <- merge(df1, df2, by.x = c("A", "B"), by.y = c("A", "C"))
aggregate( . ~ A + B + D.x, df12, sample, 1)
在 aggregate
函数的三个连续运行中给出了以下三个结果:
# run 1
A B D.x D.y
1 1 2 0.1 0.5
2 1 6 0.2 0.7
3 1 4 0.3 0.6
4 1 4 0.4 0.8
# run 2
A B D.x D.y
1 1 2 0.1 0.5
2 1 6 0.2 0.7
3 1 4 0.3 0.8
4 1 4 0.4 0.8
# run 3
A B D.x D.y
1 1 2 0.1 0.5
2 1 6 0.2 0.7
3 1 4 0.3 0.8
4 1 4 0.4 0.6
关于R合并.data.frame : probabilistic result for ambiguous keys,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33997158/
我正在学习 forecasting 中的 Pyro 介绍教程,并在训练模型后尝试访问学习到的参数,我对其中一些使用不同的访问方法得到了不同的结果(而对其他人则得到了相同的结果)。 这是教程中精简的可重
我在使用 tfp.layers.DistributionLambda 时遇到问题,我是 TF 新手,正在努力使 tensorflow 动。 有人可以提供一些有关如何设置输出分布参数的见解吗? 语境:
数据和上下文优先:所讨论的数据是 set.seed(123) df1 df1 A B D 1 1 2 0.1 2 1 6 0.2 3 1 4 0.3 4 1 4 0.4 和 > df2
我记得几年前听说过以下算法,但在网上找不到任何引用资料。它仅使用 m 计数器识别 n 元素数据流中的前 k 元素(或重击者)。这对于使用最少的内存查找热门搜索词、网络滥用者等特别有用。 算法:对于每个
我是一名优秀的程序员,十分优秀!