2014-09-12 4 views
-1

У меня есть набор данных:Loop в петле R

Date c00 c01 c02 c03 
1  3 4 10 12 
2  2 5 NULL 8 
3  NULL NULL 20 13 

Имя файла является capacity.intensity, и я пытаюсь заменить NULL с 0 по следующему коду:

for(i in capacity.intensity [1:3,]) 
{ 
    for(j in capacity.intensity [,2:5]) 
    {capacity.intensity [i,j]<- 
      ifelse(as.character(unlist(capacity.intensity [i,j])) == "NULL", "0", 
      as.character(unlist(capacity.intensity [i,j]))) 
    } 
} 

, но я получаю ошибку

ошибка в Summary.factor (с (32Л, 32Л, 32Л, 32Л, 32Л, 32Л, 32Л, 32Л, 32Л,: мин не имеет смысла для факторов

когда я отследил его.

Просьба сообщить мне, как я могу решить эту проблему?

+1

Как вы получаете эти данные в R? Похоже, что значения «NULL» - это бесполезные вещи. Должны ли они интерпретироваться как недостающие значения? Вероятно, было бы лучше установить 'na.strings =" NULL "' во время 'read.table', считая, что вы так важны для данных. Строка «NULL» сильно отличается от «истинного» значения «NULL». – MrFlick

+1

a 'dput (capacity.intensity)' было бы полезно – hrbrmstr

ответ

0

Самый простой способ состоит в использовании revalue из plyr:

sapply(capacity.intensity, 
     function(x)revalue(factor(x),c(NULL=0))) 

    Date c00 c01 c02 c03 
[1,] "1" "3" "4" "10" "12" 
[2,] "2" "2" "5" "0" "8" 
[3,] "3" "0" "0" "20" "13" 

где:

capacity.intensity <- 
read.table(text='Date c00 c01 c02 c03 
1  3 4 10 12 
2  2 5 NULL 8 
3  NULL NULL 20 13',header=TRUE) 

capacity.intensity является data.frame смешанных чисел и факторов.

+0

Но какой объект является 'capacity.intensity ', который может содержать значение NULL? Все значения должны быть факторами, а NULL - это значение NULL, а не «правильное» значение NULL. – MrFlick

+0

@MrFlick. Я добавляю некоторые данные о данных. NULL - это факторный уровень, поэтому использование 'realue' и' factor''to coerce целочисленного столбца. – agstudy

+0

Это набор данных R. – user3439050

0

Если вы имеете дело с «NULL» уровень фактора, который вы хотите изменить до нуля, вы можете сделать

> as.data.frame(lapply(df, function(x) { 
     x <- as.character(x) 
     x[x == "NULL"] <- 0; x 
    })) 
# Date c00 c01 c02 c03 
# 1 1 3 4 10 12 
# 2 2 2 5 0 8 
# 3 3 0 0 20 13 

где df представляет данные. Или вы можете написать небольшую функцию, которую вы можете сохранить и использовать позже.

> foo <- function(x, from, to) { 
     x <- as.character(x) 
     x[x == from] <- to 
     x 
    } 
> as.data.frame(lapply(df, foo, "NULL", 0)) 
# Date c00 c01 c02 c03 
# 1 1 3 4 10 12 
# 2 2 2 5 0 8 
# 3 3 0 0 20 13 
Смежные вопросы