我從網站若干源被預先清潔,然後通過一個與轉換每個列表到正常柱
cleans <- ls()
cleans <- cleans[grepl("Clean_News", cleans)]
我將它們粘結在一起的第一次嘗試選擇的啓發產生一個數據幀Stack Overflow上的解決方案:
All_News <- mapply(get, grep("Clean_News", ls(), value=T))
All_News <- data.frame(t(All_News))
All_News <- as.data.frame(All_News)
然而,這對我來說是一個問題,因爲結果是一個數據幀,其中每列是整數或字符的列表。 所以,我的主要問題是如何將數據框內的每個列表轉換爲df內的普通列。我在堆棧溢出嘗試了許多手工函數,但沒有一個爲我工作(由於我缺乏經驗,我猜...)。 東風的形式
All_News <- data.frame(a=I(list(1,1:2,1:3)), b=I(list(4:6,7:9,10:11)))
另外,我嘗試以下,其工作原理:
All_News <- do.call(rbind, lapply(cleans, get))
但有着巨大的缺點,我沒有得到數據幀的名稱作爲rownames成功/或第一列到數據幀中...... 因此,我的第二個問題是如何將單個數據幀的名稱附加到巨大df的每一行,而不是像下面的代碼行那樣的id。
t2 <- rbindlist(lapply(cleans, get), idcol = "id")
這並不是很好,因爲我需要將所有數據幀的名稱重複x次作爲標識符,例如,由於這是一個包含數千個網頁的自動化過程,因此我不會事先知道每個數據框中的行數。數據是這樣的:
news1 data1 data2
news1 data5 data6
news2 data3 data4
and so on.
我試過的東西沿着這些線路
nr <- length(cleans)
names <- rep(cleans, nr)
names <- sort(names)
但不是很成功。
你能顯示了玩具例如預期的輸出'All_News'也許'LST < - lapply(All_News,不公開); data.frame(lapply (lst,'length < - ',max(lengths(lst))))' – akrun
哇!不僅適用於玩具示例,而且適用於我的真實數據。非常感謝,Akrun!你能解釋一下第二個命令是做什麼的嗎? – litotes
lapply遍歷列表中的每個元素並將該函數應用於此元素。在那種情況下元素的最大長度。但我建議你閱讀* apply函數('?lapply'),因爲你會學到很多! –