У меня есть входной столбец (символы), который содержит более 10000 строк, и они содержат символы оператора и текстовые значения, такие как ("", ">", "<", "", "****", "inv"," MOD "," seen "), как показано ниже в коде в качестве значений.Этот столбец не содержит цифр.Он содержит только значение, указанное в коде.</p>
То, что я хотел бы сделать, это сопоставить эти символы операторов ('<', '>' и т. Д.) С различными кодами, 1) кодами операторов 2) кодами значений и иметь эти два разных кода в виде отдельных столбцов
У меня уже есть рабочий код, но он не очень эффективен, как вы видите, я повторяю одну и ту же операцию дважды.Один раз для Operator_codes, а затем для value_codes.Я уверен, что должен быть какой-то эффективный способ написать это.Я новичок в R и не очень знаком с другим подходом.
oper_val_concepts = function(DF){
operators_source = str_extract(.$symbols)
operators_source = as.data.frame(operators_source)
colnames(operators_source) <- c("Symbol")
operator_list = c("",">","<","-","****","inv","MOD","seen")
operator_codes = c(123L,14L,16L,13L,0L,0L,0L,0L)
value_codes=c(14L,12L,32L,123L,16L
,41L,116L,186L)
operator_code_map = map2(operator_list,operator_codes,function(x,y)c(x,y))
%>%
data.frame()
value_code_map = map2(operator_list,value_codes,function(x,y) c(x,y)) %>%
data.frame()
operator_code_map = t(operator_code_map)
value_code_map = t(value_code_map)
colnames(operator_code_map) <- c("Symbol","Code")
colnames(value_code_map) <- c("Symbol","Code")
rownames(operator_code_map) = NULL
rownames(value_code_map) = NULL
dfm<-merge(x=operators_source,y=operator_code_map,by="Symbol",all.x =
TRUE)
dfm1<-merge(x=operators_source,y=value_code_map,by="Symbol",all.x = TRUE)
}
t1 = oper_val_concepts(test)
Вывод команды dput равен
structure(list(Symbols = structure(c(2L, 3L, 1L, 4L, 2L, 3L,
5L, 4L, 6L), .Label = c("****", "<", ">", "inv", "mod", "seen"
), class = "factor")), .Names = "Symbols", row.names = c(NA,-9L), class =
"data.frame")
Я ожидаю, что вывод будет двумя столбцами в кадре данных, как показано ниже,