2013-04-15 53 views
-2

我有一個數據幀「論壇」,基本上是這樣的:以計數的新數據幀值

post-id: 1, 2, 3, 4, 5, ... 
user-id: 1, 1, 2, 3, 4, ... 
subforum-id: 1, 1, 1, 2, 3, ... 

現在我試圖創建一個新的數據幀,看起來像這樣:

subforum-id: 1, 2, 3, ... 
number-of-users-that-posted-only-once-to-this-subforum: ... 
number-of-users-that-posted-more-than-n-times-to-this-subforum: ... 

有沒有什麼辦法可以做到這一點,而無需預先製造所有的計數?

+1

請同時顯示您到目前爲止所嘗試的內容。 SO不是讓你的代碼免費編寫的地方。也告訴你到現在爲止還嘗試了什麼,這也表明你真的希望從解決方案中學習,而不僅僅是解決方案 –

+0

也許看看** plyr **包中的'summarize()'。這是許多SO答案中的一個,演示的使用:http://stackoverflow.com/questions/1395271/renaming-the-output-column-with-the-plyr-package-in-r/1396938#1396938 –

回答

2

使用plyrsummarise

# N = 1 here 
ddply(DF, .(subforum.id), summarise, once = sum(table(user.id) == 1), 
          n.times = sum(table(user.id) > N)) 

# subforum.id once n.times 
# 1   1 1  1 
# 2   2 1  0 
# 3   3 1  0 

這是data.frame DF:

DF <- structure(list(post.id = 1:5, user.id = c(1, 1, 2, 3, 4), 
       subforum.id = c(1, 1, 1, 2, 3)), 
       .Names = c("post.id", "user.id", "subforum.id"), 
       row.names = c(NA, -5L), class = "data.frame") 
+0

非常感謝,阿倫! (再次,我猜...)這正是我所期待的。順便說一句:我沒有試圖得到任何東西,我也不喜歡那種態度。但當你不知道你在找什麼時,很難表達出來...... R肯定會給我帶來麻煩。 – Bob

+0

+1顯示'plyr'方法。我一般不是'plyr'用戶,所以對我來說有趣的是我看到與我的基本相同的答案,但採用了不同的方法。 – A5C1D2H2I1M1N2O1R2T1

+0

@Bob,我認爲主要的一點是,一個好問題也應該顯示你到目前爲止所嘗試過的。人們有時候更容易接受你離開的地方。另外,這種探索對於學習如何最大限度地減少R給你的麻煩很重要。最後,一些示例數據總是很好。 – A5C1D2H2I1M1N2O1R2T1

2

這是一個基本的想法讓你開始:使用table獲得的計數用戶ids by subforum ID並從那裏開始工作:

> mydf <- structure(list(post.id = c(1, 2, 3, 4, 5), user.id = c(1, 1, 
2, 3, 4), subforum.id = c(1, 1, 1, 2, 3)), .Names = c("post.id", 
"user.id", "subforum.id"), row.names = c(NA, -5L), class = "data.frame") 
> mytable <- with(mydf, table(subforum.id, user.id)) 
> mytable 
      user.id 
subforum.id 1 2 3 4 
      1 2 1 0 0 
      2 0 0 1 0 
      3 0 0 0 1 

提示:從那裏,看看rowSums函數,並考慮如果總結邏輯向量會發生什麼。