r - R:基于 2 个范围指标从二维网格映射和检索值
问题描述
所以,我有一个示例数据框和一个示例网格,我想做的是根据数据框的值从网格中映射和检索相应的数据。请参阅下面的示例。免责声明:数据和网格是示例,使用的名称/指标名称完全用于模仿目的。
示例网格:为了澄清,
L为左开右闭括号,即L000_050表示(0, 50],L080_HI表示(80, +]。
D是左闭右开括号,即D178_190表示[178, 190),D190_HI表示[190, +)。
df_grid <- data.frame(
"Tall/Look" = c("D000_178", "D178_190","D190_HI"),
"L000_050" = c(66.82, 78.17, 80.47),
"L050_080" = c(78.37, 80.47, 85.47),
"L080_HI" = c(85.65, 91.85, 90.54)
)
> print(df_grid)
Tall.Look L000_050 L050_080 L080_HI
1 D000_178 66.82 78.37 85.65
2 D178_190 78.17 80.47 91.85
3 D190_HI 80.47 85.47 90.54
数据:
df_name <- data.frame(
"Name" = c("Liam", "Noah", "William", "James", "Oliver", "Lucas", "Benjamin"),
"Tall" = c(1.75, 1.80, 1.82,1.69,1.92,1.9,1.85),
"Look" = c(81.33, 75.78, 60.13, 70.52, 50.91, 85.21, 48.07)
)
print(df_name)
> print(df_name)
Name Tall Look
1 Liam 1.75 81.33
2 Noah 1.80 75.78
3 William 1.82 60.13
4 James 1.69 70.52
5 Oliver 1.92 50.91
6 Lucas 1.90 85.21
7 Benjamin 1.85 48.07
所需输出:基本上我想将 df_name 中的“Tall”和“Look”指标映射到 df_grid 并检索网格值并将它们存储在“Point”列中,结果如下:
> print(df_mapped)
Name Tall Look Point
1 Liam 1.75 81.33 85.65
2 Noah 1.80 75.78 80.74
3 William 1.82 60.13 80.74
4 James 1.69 70.52 75.37
5 Oliver 1.92 50.91 80.47
6 Lucas 1.90 85.21 90.54
7 Benjamin 1.85 48.07 78.17
到目前为止,我一直在网上搜索这个,我找到了 find_interval、match 和其他一些材料,但它们似乎不是为二维映射设计的。如果可以,请提供您的帮助,在此先感谢。
解决方案
使 df_grid 成为矩阵更有意义。然后使用 cut 将标签分配给 df_name 中的值,标签指定为查找矩阵的行名或列名。之后就是插入值的问题..
# make you df_grid a matrix instead
mat_grid <- rbind(
c(66.82, 78.17, 80.47),
c(78.37, 80.47, 85.47),
c(85.65, 91.85, 90.54)
)
colnames(mat_grid)=c("D000_178", "D178_190","D190_HI")
rownames(mat_grid)=c("L000_050", "L050_080","L080_HI")
# we assign the labels to Look values
l1 <- cut(df_name$Look,
breaks=c(0,50,80,+Inf),labels=rownames(mat_grid),right=FALSE)
# we assign the labels to Tall values
l2 <- cut(df_name$Tall,
breaks=c(0,1.78,1.90,+Inf),labels=colnames(mat_grid),right=FALSE)
# we call out each mapped values
# might be a faster way to do this without sapply-ing..
# from http://eamoncaddigan.net/r/programming/2015/10/22/indexing-matrices/
df_name$Point = mat_grid[cbind(as.character(l1),as.character(l2))]
推荐阅读
- node.js - 在 koa-router 中返回“未找到”
- javascript - 提交后如何清空表单
- wordpress - Woocommerce 获取订单项元
- android - 如何在 Modal Bottomsheet android 中动态更改内容
- java - java去除汉字的方法
- java - 如何使用带有 AWS 临时凭证的 java 从 s3 存储桶下载文件
- notepad++ - notepad++ 更改 URL
- azure-devops - POST 请求的 VSTS REST API 权限
- ballerina - 运行 Ballerina 代码时找不到包
- java - 如何在 github 上正确扩展现有的 android 模块?