2016-07-13 58 views
0

實施例的數據:無效因子水平`strsplit`數據

tmp <- 
c("30.55,114.27", "39.31,115.92", "0,0", "0,0", "27.35,111.78", 
"0,0", "34.47,118.97", "34.62,113.72", "0,0", "0,0", "0,0", "31.43,120.55", 
"0,0", "0,0", "31.67,119.82", "44.28,129.04", "23.37,113.44", 
"23.31,112.84", "24.41,102.34", "30.77,104.24", "0,0") 

環路串分割數據:

dat1 <- data.frame(as.character(NA),as.character(NA)) 
for(i in 1:length(tmp)){#nrow(train2)){ 
    dat1[i,] <- do.call(rbind, strsplit(tmp[i], ",")) 
} 

問題:

有50級或更多的警告(使用警告()來查看第一個50)

Warning messages: 
1: In `[<-.factor`(`*tmp*`, iseq, value = "0") : 
    invalid factor level, NA generated 
2: In `[<-.factor`(`*tmp*`, iseq, value = "0") : 
    invalid factor level, NA generated 
3: In `[<-.factor`(`*tmp*`, iseq, value = "29.29") : 
    invalid factor level, NA generated 
4: In `[<-.factor`(`*tmp*`, iseq, value = "106.25") : 
    invalid factor level, NA generated 
5: In `[<-.factor`(`*tmp*`, iseq, value = "0") : 
    invalid factor level, NA generated 
6: In `[<-.factor`(`*tmp*`, iseq, value = "0") : 

但是,如果我運行它只是1行,它看起來右:

> do.call(rbind, strsplit(tmp[i], ",")) 
    [,1] [,2]  
[1,] "30.55" "114.27" 
+0

看看'for(循環)之前的'str(dat1)',這個警告信息可能會更有意義。 – joran

+0

...也許你更喜歡更像'do.call(rbind,lapply(tmp,function(x)strsplit(x,「,」)[[1]]))''? – joran

+0

關於第一條評論,我看到了你的觀點。儘管我可以發誓,但當我使用數字設置'dat1'時,我得到了同樣的錯誤。讓我在第二條評論中嘗試一下代碼。只需1秒。 –

回答

2

似乎不需要在這種情況下一個循環。你可以試試

dat1 <- do.call(rbind, strsplit(tmp, ","))