我想採取data.frame
其中一些列是因子,通過因子分組以複雜的方式對其進行彙總,然後將結果組裝成新的總結data.frame.
這一直是人們一直都在做的事情,但我似乎無法做到。這是我想要做的這種事情的一個簡單的例子:如何將「by」數據結構轉換爲具有因子的數據框架
> df
direction distance
1 south 83.40364
2 east 38.45644
3 west 92.29418
4 east 87.81878
5 north 99.62949
6 west 10.65441
7 south 58.06977
8 north 79.34895
> bydir <- by(df,df$direction,function(x) {
list(dir=x$direction[1], dist=sum(x$distance))})
> dirs <- data.frame()
> for (i in bydir) {dirs <- rbind(dirs, i)}
Warning messages:
1: In `[<-.factor`(`*tmp*`, ri, value = "north") :
invalid factor level, NA generated
2: In `[<-.factor`(`*tmp*`, ri, value = "south") :
invalid factor level, NA generated
3: In `[<-.factor`(`*tmp*`, ri, value = "west") :
invalid factor level, NA generated
> dirs
dir dist
2 east 126.2752
21 <NA> 178.9784
3 <NA> 141.4734
4 <NA> 102.9486
我看了plyr
了一下,我打賭我能得到它爲我工作,但我的真正的問題是,爲什麼不能R接受不是有效等級的dir
因子的新值,並且簡單地爲該因子添加等級,因爲我一次只構建一個數據框架?即使將因子轉換爲character
並將stringsAsFactors = FALSE
設置爲rbind
也不會阻止R試圖使該列成爲因子並生成NA。我想要一個解決方案,但更重要的是,我想了解R在這裏做什麼。
感謝,
格倫
附:我在這裏發現了一些有趣的方向:http://lamages.blogspot.com/2012/01/say-it-in-r-with-by-apply-and-friends.html,但我還沒有得到任何一個爲我的案件工作。