簡體   English   中英

聚合數據,創建計算重復字符串數的新列,R

[英]Aggregate data, create new column that counts number of repeated strings, R

我有一個名為 mydata 的數組。 列標題是 c("name","ID","Stuff_A","Stuff_B")。 “name”是一個字符串,“ID”是一個屬於每個“name”的數字,而“Stuff_A”和“Stuff_B”只是我想要求和的數值。 如果我使用,

聚合(.~ID+名稱,我的數據,總和)

我得到了我幾乎想要的東西。 “Stuff_A”和“Stuff_B”為具有相同名稱名稱和 ID 的值求和。 但是,我還想在聚合數據中創建一個新列,告訴我找到了每個名稱的多少個實例。 有任何想法嗎?

編輯:我的意思是 Stuff_A 列匯總在一起,對於每個相應名稱的 Stuff_B 相同。 對不起。 這是一些數據。

a = c(2, 3, 5, 4, 11, 6) 
s = c("A. Sphere", "A. Square", "A. Line", "A. Square","A. Sphere", "A. Square") 
e = c(1111,1112,1113,1112,1111,1112)
b = c(1, 8, 2, 0, 8, 1) 
df = data.frame(s,e, a, b)
colnames(df)<-c("name","id","Stuff_A","Stuff_B")
sumdf<-aggregate(.~name+id,df,sum)

最后一行幾乎完成了我想要它做的事情,但我想要第 5 列,其中每個名稱出現了多少次。 所以在我這里的模擬數據的情況下,我們將在 A. Sphere 旁邊有 2 個,在 A. Square 旁邊有 3 個,在 A. Line 旁邊有 1 個。

編輯 2:我確實找到了一個愚蠢的方法。 我只是在復制名稱列的聚合命令之前創建了一個新列,重命名了新名稱列 name_count,並按原樣運行了聚合命令。 那個有效。

使用庫dplyr你可以嘗試這樣的事情:

library(dplyr)
df %>% group_by(name, id) %>% summarise(sumOfStuffA = sum(Stuff_A), sumOfStuffB = sum(Stuff_B), nObservations = n())

輸出如下:

Source: local data frame [3 x 5]
Groups: name [?]

       name    id sumOfStuffA sumOfStuffB nObservations
     (fctr) (dbl)       (dbl)       (dbl)         (int)
1   A. Line  1113           5           2             1
2 A. Sphere  1111          13           9             2
3 A. Square  1112          13           9             3

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM