簡體   English   中英

R中數據幀的復制合並和頻率計算

[英]replicate merging and frequency calculation of dataframe in R

我有一個數據框,我想對它做三件簡單但不明顯的事情:

計算字符串在“名稱”列中重復的次數,並將其記錄在新列中。 找到重復項后,將“ stop”列中的值添加在一起,最后刪除該字符串所在的每個后續行。

例如,我有:

dim(df)
[1] 80000      2

head(df, 4)
    name          stops       
1 dowewewg.1          1 
2 cat.1               1    
3 dowewewg.1          1    
4 cat.1               2    

輸出應為

   name           stops    frequency
1 dowewewg.1          2       2
2 cat.1               3       2

有任何想法嗎?

您可以使用split / apply / combine解決此問題。 這是一種使用split來按name進行拆分, lapply來計算每個組的摘要統計量的方法,並使用rbind進行do.call來組合所有結果。

do.call(rbind, lapply(split(df, df$name), function(x) {
  data.frame(name=x$name[1], stops=sum(x$stops), frequency=nrow(x))
}))
#                  name stops frequency
# cat.1           cat.1     3         2
# dowewewg.1 dowewewg.1     2         2

這是另一種方法

# read in the data
df<-read.table(text="
name          stops       
1 dowewewg.1          1 
2 cat.1               1    
3 dowewewg.1          1    
4 cat.1               2 ",
header=T, stringsAsFactors=F) 

現在:

newdf <- data.frame(
 stops = tapply(df$stops, df$name, sum),
 frequency = as.vector(table(df$name)))
#           stops frequency
#cat.1          3         2
#dowewewg.1     2         2

如果要一個name列:

newdf$name <- rownames(newdf)
#           stops frequency       name
#cat.1          3         2      cat.1
#dowewewg.1     2         2 dowewewg.1

暫無
暫無

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

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