【发布时间】:2022-01-22 08:28:39
【问题描述】:
我在概括处理一些“问题数据”(列表的矢量化元素)的方法时遇到了问题。 (我不完全确定我是否准确地描述了这一点,所以请原谅我的无知)。
目标:
我正在尝试编译一个自动处理以下问题的函数,因为目的是重复运行/利用此方法。
问题:
我已经通过单位名称(传感器来自的设备)从数据库中提取了一些传感器数据,通常传感器数据以向量的形式出现(根据所需的结果 - 如下),但对于某些单位(数据收集器的配置不同)它返回一个向量列表。
向量中的元素数量与现场单元的数量有关(即如果现场有两个单元,/01 和 /02,那么向量将包含 2 个元素....等等)
我只想将与该单元相关的传感器数据保存在相关列中。
并非所有单元都以相同的方式配置,所以我只打算在确认列的类是一个列表时运行一个函数。
传感器的数量和标签每次都会不同(输入到主函数中)。
预期方法:
- 对每列执行以下检查和纠正措施
- 检查列类 - 检查类是否为“列表”
- 如果为 FALSE,则什么也不做。
- 如果为 TRUE,则使用“unlist_func”(子函数)对每一行执行以下操作:
- 检查'unit'列每一行的文本字符串的结尾并提取unit_no
- 取消列出当前元素,选择向量中与unit列中unit_no对应的数字
- 将列类修改为
可重现的问题:
以下小标题是我正在使用的示例:
unit <- c('a2b7/01', 'a2b7/02', 'a2b7/03', 'a2b7/01', 'a2b7/02', 'a2b7/03', 'a2b7/01', 'a2b7/02', 'a2b7/03')
sen1 <- list(c(1,2,3), c(4,5,6), c(7,8,9), c(10,11,12), c(13,14,15), c(16,17,18), c(19,20,21), c(22,23,24), c(25,26,27))
sen2 <- list(1, 2, 3, 4, 5, 6, 7, 8, 9)
sensor_data <- tibble(unit, sen1, sen2)
期望的结果:
unit <- c('a2b7/01', 'a2b7/02', 'a2b7/03', 'a2b7/01', 'a2b7/02', 'a2b7/03', 'a2b7/01', 'a2b7/02', 'a2b7/03')
sen1 <- c(1,5,9,10,14,19,23,27)
sen2 <- c(1, 2, 3, 4, 5, 6, 7, 8, 9)
sensor_data_new <- tibble(unit, sen1, sen2)
到目前为止的尝试和请求:
为了避免空手而归,我已经发布了我预期方法的草率版本,但我很抱歉,这是一项正在进行的工作,我感谢其中存在错误,但我希望能吸引那些在那里的人尽可能提供帮助或建议不同的方法。
所有建议将不胜感激。
function(unit, sensors, date_from, date_to){
# ------ QUERYING TASK ------------------------
sensor_data <- 'pulls sensor info from unit names'
# ------ SUB FUNCTION - Unlist function -------
unlist_func <- function(df = sensor_data, j){
sensor_data_distinct <- df %>%
mutate(unit_no = str_extract(unit, '\\d$')) %>%
select(unit_no) %>%
distinct()
for (i in 1:nrow(df))
{
if(length(df[, j[[i]] ]) => 1 & str_ends(df$unit, sensor_data_distinct$unit_no)){
unlist(df[i, j])
df[sensor_data_distinct$unit_no]
} else(sensor_data[, j])
}
# ------- STAGE 1 CLEANSING FUNCTION -------------
# unit will always be in column 1 and datetime always in column 2
stg1_cleanse <- for(j in 3:ncol(sensor_data)) { # for-loop over columns
if (is.list(sensor_data[, j]) == TRUE){
lapply(unlist_func.....)
}
}
}
# ------- STAGE 1 CLEANSING FUNCTION -------------
stg2_cleanse <- 'further cleansing routine'
}
【问题讨论】: