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

标签 r merge dataframe

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

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

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/

相关文章:

python - 将空白字符串替换为 nan

r - 误差线未在条形图上正确绘制

r - k表示聚类结果存储以备后用

python - 循环字典列表并合并具有相同ID的字典

python - 从 dataframe pandas python 中删除一个例子

r - R : name autocompletion? 中的数据帧

r - 在容器内生成 Shiny 进程时保留环境变量

r - 使用 ggplot 展开密度图

merge - Notepad++ 合并两行

java - 与 ArrayList 的合并排序