将训练数据映射到元数据

Posted

技术标签:

【中文标题】将训练数据映射到元数据【英文标题】:mapping train data to meta data 【发布时间】:2020-03-28 21:05:36 【问题描述】:

我想转换元数据映射火车数据。因为经度和纬度不值得我的火车数据。所以我将使用元数据距离的平均值。我试过合并功能,但它不好。

示例:

1) 训练数据

station  log  lat
      A  123  127
      B  121  126
      C  127  129
      D  113  118
      E  119  118

2) 元数据

from  to
   A   C
   B   C
   A   D
   A   E
   D   E

3) 期望的输出

from fromlog fromlat tolog tolat
   A     123     127   127   129
   B     121     126   127   129
   A     123     127   113   118
   A     123     127   119   118
   D     113     118   119   118

【问题讨论】:

你能解释一下你想要的输出吗?我不清楚。 不一定是想要的输出。在火车数据中,它有日志和纬度信息。但是元数据只有名称或代码(确切地说,它也有不同的信息,例如时间或用户年龄。)。所以,我想在火车数据中使用“log”和“lat”将“from”和“to”列转换为“fromlog”、“fromlat”、“tolog”和“tolat”。然后我将使用元数据作为火车数据。 【参考方案1】:

在基础 R 中,我们可以在 lapply 调用中使用 match

do.call(cbind.data.frame, unlist(lapply(df2, function(x) 
     inds <- match(x, df1$station)
     list(log = df1$log[inds], lat = df1$lat[inds])
), recursive = FALSE))

#  from.log from.lat to.log to.lat
#1      123      127    127    129
#2      121      126    127    129
#3      123      127    113    118
#4      123      127    119    118
#5      113      118    119    118

数据

df1 <- structure(list(station = c("A", "B", "C", "D", "E"), log = c(123L, 
121L, 127L, 113L, 119L), lat = c(127L, 126L, 129L, 118L, 118L
)), row.names = c(NA, -5L), class = "data.frame")

df2 <- structure(list(from = c("A", "B", "A", "A", "D"), to = c("C", 
"C", "D", "E", "E")), row.names = c(NA, -5L), class = "data.frame")

【讨论】:

【参考方案2】:

这是一种选择

library(dplyr)
d1 <- inner_join(df1, df2,  by = c('station' =  'to')) %>%
    select(tolog = log, tolat = lat) 
d2 <- inner_join(df1, df2, by = c('station' = 'from')) %>%
    select(fromlog = log, fromlat = lat)
bind_cols(df2 %>% 
             select(from), d2, d1)

【讨论】:

这不是一个好的答案。因为它比df2可以进行更多的观察。

以上是关于将训练数据映射到元数据的主要内容,如果未能解决你的问题,请参考以下文章

20210608 由永久代到元空间

20210608 由永久代到元空间

Scala:将 Map 映射到元组列表

从VR到元宇宙:回顾30年,改变虚拟现实的18件大事

Swift 将数组数组映射到元组数组 - 'map' 产生 [T],而不是预期的

IMPALA-元数据相关