gpt4 book ai didi

r - 矢量查找数据框行的邻居

转载 作者:行者123 更新时间:2023-12-04 11:33:24 25 4
gpt4 key购买 nike

我有两个数据框,下面是每个数据框的一个小样本:

df1 <- data.frame(a1= c(3,4), a2 = c(8, 8), a3 = c(4, 18), a4 = c(9,9), a5 = c(17, 30))

df2 <- data.frame(a1 = c(2,2,2,3,3,3,4,4,4), a2 = c(7,7,7,7,7,7,7,7,7),
a3 = c(4,4,4,4,4,4,4,4,4), a4 = c(10,10,10, 10, 10, 10, 10,10,10),
a5 = c(15,16,17, 15, 16, 17, 15, 16, 17))

我想检查 df1 的每一行,在 df2中是否有“邻居” ,其中,邻居我的意思是观察值最多相差 1 每列 (绝对值)。例如, df2 的第 2 行是 df1 中第 1 行的邻居.

我目前这样做的方式如下:
sweep(as.matrix(df2), 2, as.matrix(df1[1,]), "-")

对于 df1 的第 1 行,而且我必须对 df1 的每一行重复此操作。 请注意, df2 和 df1 的行数不同。

但是,我真正想要的是避免“按行”执行此操作,因为我的数据框有很多行。有没有办法以矢量方式做到这一点?

最佳答案

您可以使用拆分 df1 的行成一个列表,然后使用 lapply实现矢量化:

my_list=lapply(as.list(data.frame(t(df1))),function(x) sweep(as.matrix(df2), 2, as.matrix(x), "-"))
my_list的每个元素是 df1中每一行的计算结果
my_list[[1]]
a1 a2 a3 a4 a5
[1,] -1 -1 0 1 -2
[2,] -1 -1 0 1 -1
[3,] -1 -1 0 1 0
[4,] 0 -1 0 1 -2
[5,] 0 -1 0 1 -1
[6,] 0 -1 0 1 0
[7,] 1 -1 0 1 -2
[8,] 1 -1 0 1 -1
[9,] 1 -1 0 1 0

此外,您可以使用 parallel::mclapply比传统的更快 lapply

关于r - 矢量查找数据框行的邻居,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52291598/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com