R中数据帧的复制合并和频率计算
我有一个数据框架,我想对它做三件简单但不明显的事情: 计算字符串在“名称”列中重复的次数,并将其记录在新列中。当发现重复项时,将“stop”列中的值加在一起,最后,删除该字符串所在的每个后续行 例如,我有: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
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