因此,我有一个示例数据和一个示例网格,我想要做的是根据来自dataframe的值从网格中映射和检索相应的数据。例如,请参阅下文。免责声明:数据和网格都是样本,使用的名称/度量名称完全是为了模仿目的。
示例网格:为了澄清,
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所需的输出:基本上,我希望将"Tall“和"Look”度量从df_name映射到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和其他一些材料,但它们似乎不是为二维映射而设计的。如有可能,请提供帮助,谢谢。
发布于 2019-10-28 22:13:24
让df_grid成为一个矩阵更有意义。然后使用裁剪将标签分配给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))]https://stackoverflow.com/questions/58593650
复制相似问题