2016-12-15 9 views
-1

Я ищу функцию, похожую на FindReplace, которая позволит мне отображать значения на основе вектора, а не одного значения.R Сопоставление значений с вектором

У меня есть таблица поиска, которая выглядит так, что я хочу использовать для сопоставления значений в dataframe.

Headers: COLUMN_NAME, CODE, DESCRIPTION 
Row1: arrmin, 97, Officially Cancelled 
Row2: arrmin, 98, Unknown if Arrived 
Row3: atmcond, -1, Blank 
Row4: atmcond, 0, No Additional Atmospheric Conditions 

Эта таблица перекодировки имеет тысячи строк, поэтому я не могу их вручную, и мое первоначальное решение слишком неэффективно и потребуется несколько дней, чтобы работать.

dataframe Я использую сотни колонн, такие как arrmin и atmcond, который необходимо изменить величины от 97 до официально Отменены и т.д.

Значения от 0-100 (или сколько есть значений) измените на основе того, в каком столбце он находится. Я написал этот код ниже, но он действительно неэффективен и требует нескольких дней для строк в 300 тыс. строк.

columnsToReplace <- which(colnames(CRASH) %in% CapitalColumns) 
dfColumns <- colnames(CRASH) 
for (i in columnsToReplace){ 
    tempColumn <- dfColumns[i] 
    tempLookup <- capitalLookupTable[which(capitalLookupTable$COLUMN_NAME ==tempColumn),] 
    CRASH <- FindReplace(data=CRASH,Var=tempColumn,replaceData = capitalLookupTable, 
      from = "Code",to = "Description",exact=T) 
} 

columnsToReplace вектор я создал, который содержит строковые имена каждого из столбцов, которые существуют в таблице.

ответ

0
#Some data 
s<-data.frame(A=c(1,1,2,2),B=c(2,4,6,6),C=c(1,3,5,7)) 
mapping<-data.frame(ColumnName=c(rep("A",2), rep("B",3), rep("C",4)), Code=c(1,2,2,4,6,1,3,5,7)) 
mapping$Description<-paste0(mapping$ColumnName, mapping$Code) 

#From wide to long 
library(reshape) 
melted.s<-melt(s) 

#Join 
melted.s<-merge(melted.s, mapping, by.x=c("variable","value"), by.y=c("ColumnName","Code")) 

#From long to wide 
p<-data.frame(matrix(melted.s$Description, ncol=ncol(s))) 
names(p)<-names(s) 

 Смежные вопросы

  • Нет связанных вопросов^_^