2014-09-12 42 views
-1

循環我有一個數據集:環路作爲R

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

的文件名是capacity.intensity,我試圖通過下面的代碼以0比替換NULL:

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(C(32L,32L,32L,32L,32L,32L,32L,32L,32L,: 分鐘沒有意義的因素

當我追溯它。

請告訴我如何解決這個問題?

+1

你如何將這些數據轉換爲R?看起來像那些「NULL」值正在搞亂事情。它們是否應該被解釋爲缺失值?在read.table中設置'na.strings =「NULL」''可能會更好,假設這是數據的重要性。字符串「NULL」與「真」NULL值有很大不同。 – MrFlick 2014-09-12 20:20:03

+1

'dput(capacity.intensity)'將會有幫助 – hrbrmstr 2014-09-12 20:20:34

回答

0

最簡單的方法是使用從revalueplyr

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 2014-09-12 20:17:59

+0

@MrFlick我添加了一些關於數據的細節。 NULL是因子水平因此使用'revalue'和'factor''來強制整數列)。 – agstudy 2014-09-12 20:22:10

+0

這是一個R數據集。 – user3439050 2014-09-12 20:32:49

0

如果你正在處理,你想改變零「空」的因素水平,你可以做

> 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