2014-02-08 38 views
-1

抱歉,這是一個無關列表的問題。我使用「stringr」從網絡日誌文件數據框中解析文本變量,最終目標是理解網站上提供的不同文件類型的相對頻率。數據以下列格式顯示(經過一段時間的解析後):R:包含613607個元素的列表,每個元素包含2 ...?並想轉換「?」進入數據幀

List of 613607 
$ : chr [1:2] "/btauxdir/getsimpleload" "cfm" 
$ : chr [1:2] "/btauxdir/getsimpleload" "cfm" 
$ : chr [1:2] "/btauxdir/getsimpleload" "cfm" 
$ : chr [1:2] "/btauxdir/getsimpleload" "cfm" 
$ : chr [1:2] "/btauxdir/getsimpleload" "cfm" 
$ : chr [1:2] "/btauxdir/getsimpleload" "cfm" 
$ : chr [1:2] "/btauxdir/getsimpleload" "cfm" 
$ : chr [1:2] "/btauxdir/getsimpleload" "cfm" 
$ : chr [1:2] "/index" "cfm" 
$ : chr [1:2] "/monitor/serverstatus" "cfm" 

第二件事?柱?元件?子列表? (我甚至不知道該怎麼稱呼它)......在這個例子中,所有的值都是「cfm」,可以是各種不同的2和3個字符的文件擴展名(.tz,.jpg等) 。

我想將列表的第二個東西轉換成一列數據(最終將放回原始數據框並在文件類型上運行分佈圖)。

我已經花了大約90分鐘的時間從多個Springer和O'Reilly的書籍中找到各種解決方案。最終,我認爲我只是不理解R列表(我不是程序員,所以「就像編程語言Y中的X並不能幫助我)」。

將變量導出到Excel,解析成2列,重新導入到R,並綁定到原始數​​據框,花了我不到兩分鐘(嘆氣)。但這不是我來這裏的原因,對嗎?我來這裏學習,並希望你們都會能夠幫助!

提前感謝!

+1

'do.call(rbind,list)' – rawr

+0

和'sapply(list,「[[」,2)' –

+0

謝謝你,rawr和Jake Burkhead(以及和新手一起溫柔)。 「do.call(rbind,list」似乎已經工作了。出於某種原因,「sapply ...」生成了以下錯誤消息:FUN(X [[6724L]],...)中的錯誤:下標超出範圍 – user2621147

回答

1

argh:我不知道我在哪裏找到了下面的代碼 - 可能在這裏或沒有(搜索但找不到它)。與感謝所有誰貢獻,這個回答我的問題:

myParsedData <- data.frame(do.call('rbind', 
            strsplit(as.character(myData$myVariable), 
              '.', fixed=TRUE))) 

所以,這需要我想解析(myVariable)的變量,將其分解上一段,然後返回它作爲一個data.frame有2個變量,X1 (我解析的左側)和X2(右側)。

然後,I cbind'ed X2到我原來的myData

非常感謝您的匿名捐助!

1

爲了澄清,你有長度2.在代碼的特徵向量的名單,這將是

a <- c("element11", "element12") 
b <- c("element21", "element22") 
c <- c("element31", "element32") 
abc <- list(a, b, c) 
str(abc) 

List of 3 
$ : chr [1:2] "element11" "element12" 
$ : chr [1:2] "element21" "element22" 
$ : chr [1:2] "element31" "element32" 

如@Jake Burkhead所述,您可以使用lapplysapply從每個列表元素(a,b或c)中提取單個元素。

爲教學起見,我包括他的評論在這裏:

sapply(abc, "[[", 2) 
[1] "element12" "element22" "element32" 

你問sapply(或lapply)的列表執行功能「[」。 2作爲...參數傳遞,並用作索引。如果你的手去做,這將相當於

> c(abc[[1]][2], abc[[2]][2], abc[[3]][2]) 
[1] "element12" "element22" "element32" 

你可以認爲lapply或sapply作爲一個隱藏的循環,通過你的數據的大小循環應用指定的函數。

+0

Thanks,Roman。非常有幫助的解釋,並給了我很好的關於如何組織列表的意識。根據上述,「sapply ...」沒有工作:-( – user2621147

+0

Define'did not work',@ user2621147。 –

+0

嗨,羅馬 - 當它碰到一個空白(公平地說,我沒有指定),它失敗了。 – user2621147

相關問題