gpt4 book ai didi

r - 基于向量键合并数据帧

转载 作者:行者123 更新时间:2023-12-02 07:33:44 25 4
gpt4 key购买 nike

我是一个绝对的初学者,我希望有人能够帮助我解决一个合并问题,这个问题我在今晚的大部分时间里都被困住了,到目前为止还无法成功地调整解决方案来解决与此类似的问题具体例子。

我制作了一个虚拟数据框和矢量来帮助说明我的问题:

dumdata <- data.frame(id=c(1:5), pcode=c(1234,9876,4477,2734,3999), vlo=c(100,450,1000,1325,1500), vhi=c(300,950,1100,1450,1700))

id pcode vlo vhi
1 1234 100 300
2 9876 450 950
3 4477 1000 1100
4 2734 1325 1450
5 3999 1500 1700


vkey <- c(105,290,513,1399,1572,1683)

在 vkey 的值落在变量 vlo 和 vhi 之间的情况下,我想输出一个包含 dumdata 数据的新数据帧。实际上,vkey 的值总是落在 vlo-vhi 范围内,并且范围总是离散的。

所需的输出如下所示:

id   pcode   vlo   vhi  vkey
1 1234 100 300 105
1 1234 100 300 290
2 9876 450 950 513
4 2734 1325 1450 1399
5 3999 1500 1700 1572
5 3999 1500 1700 1683

最佳答案

无需使用 for 循环,您可以使用 sapply 一次性构建整个索引向量。

ind <- sapply(vkey, function(x) which(dumdata$vlo < x & x < dumdata$vhi))
data.frame(dumdata[ind,], vkey)

id pcode vlo vhi vkey
1 1 1234 100 300 105
1.1 1 1234 100 300 290
2 2 9876 450 950 513
4 4 2734 1325 1450 1399
5 5 3999 1500 1700 1572
5.1 5 3999 1500 1700 1683

如果 vkey 中的任何值与 dumdata 中的多行匹配,它会变得更丑陋,因为您需要使用 lapply 而不是 sapply然后做

data.frame(dumdata[unlist(ind),], rep(vkey, sapply(vkey, length)))

返回所有匹配项,但我从示例中得出它不会发生。

编辑:

为了完整起见,我要补充一点,你也可以使用 mapply,但这主要是为了你需要与多个变量进行比较的情况(比如你有 vkey1vkey2 需要一起满足一个条件)。

ind <- mapply(function(x, y) which(dumdata$vlo < x & y < dumdata$vhi),
vkey1, vkey2)

关于r - 基于向量键合并数据帧,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19119022/

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