R中数据帧的复制合并和频率计算

R中数据帧的复制合并和频率计算,r,dataframe,R,Dataframe,我有一个数据框架,我想对它做三件简单但不明显的事情: 计算字符串在“名称”列中重复的次数,并将其记录在新列中。当发现重复项时,将“stop”列中的值加在一起,最后,删除该字符串所在的每个后续行 例如,我有: dim(df) [1] 80000 2 head(df, 4) name stops 1 dowewewg.1 1 2 cat.1 1 3 dowewewg.1 1

我有一个数据框架,我想对它做三件简单但不明显的事情:

计算字符串在“名称”列中重复的次数,并将其记录在新列中。当发现重复项时,将“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
name
进行拆分,
lappy
计算每个组的汇总统计信息,
do.call
rbind
组合所有结果

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) 

谢谢事实证明,这在R中需要非常长的时间。你知道如何在python中实现吗?@user3141121如果你想在python而不是R中实现这一点,我会发布一个带有python标记的新问题,以便社区可以帮助你。
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
newdf$name <- rownames(newdf)
#           stops frequency       name
#cat.1          3         2      cat.1
#dowewewg.1     2         2 dowewewg.1