[英]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.