首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >R:基于2种远程度量从二维网格中映射和检索值。

R:基于2种远程度量从二维网格中映射和检索值。
EN

Stack Overflow用户
提问于 2019-10-28 15:20:46
回答 1查看 62关注 0票数 1

因此,我有一个示例数据和一个示例网格,我想要做的是根据来自dataframe的值从网格中映射和检索相应的数据。例如,请参阅下文。免责声明:数据和网格都是样本,使用的名称/度量名称完全是为了模仿目的。

示例网格:为了澄清,

L为左开右闭括号,即L000_050均值(0,50),L080_HI均值(80,+)。

D为左闭右开括号,即D178_190指[178,190],D190_HI为[190,+)。

代码语言:javascript
运行
复制
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)
)
代码语言:javascript
运行
复制
> 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

数据:

代码语言:javascript
运行
复制
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)
代码语言:javascript
运行
复制
> 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

所需的输出:基本上,我希望将"Tall“和"Look”度量从df_name映射到df_grid,并检索网格值并将它们存储在"Point“列中,结果如下:

代码语言:javascript
运行
复制
> 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和其他一些材料,但它们似乎不是为二维映射而设计的。如有可能,请提供帮助,谢谢。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-10-28 22:13:24

让df_grid成为一个矩阵更有意义。然后使用裁剪将标签分配给df_name中的值,标签指定为查找矩阵的行名或列名。之后是插入值的问题.

代码语言:javascript
运行
复制
# 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))]
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58593650

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档