gpt4 book ai didi

R 按组计算元素的出现次数

转载 作者:行者123 更新时间:2023-12-04 10:58:38 25 4
gpt4 key购买 nike

这个问题在这里已经有了答案:





Add column with order counts

(2 个回答)



Count number of rows within each group

(16 个回答)


6年前关闭。




在每个组中计算 vector 或 data.frame 上元素出现次数的最简单方法是什么?
我的意思不是只计算总数(正如其他 stackoverflow 问题所问的那样),而是为每个连续出现的事件提供不同的数字。

例如对于这个简单的数据框:(但我将使用具有更多列的数据框)

mydata <- data.frame(A=c("A","A","A","B","B","A", "A"))

我找到了这个解决方案:
cbind(mydata,myorder=ave(rep(1,nrow(mydata)),mydata$A, FUN=cumsum))   

结果如下:
 A myorder  
A 1
A 2
A 3
B 1
B 2
A 4
A 5

没有任何单一的命令可以做到这一点吗?还是使用专门的包?

我希望它稍后使用 tidyr 的 spread() 函数。

我的问题不一样
Is there an aggregate FUN option to count occurrences?
因为我不想知道最后出现的总次数,而是想知道每个元素的累积出现次数。

好的,我的问题有点复杂
mydata <- data.frame(group=c("x","x","x","x","y","y", "y"), letter=c("A","A","A","B","B","A", "A"))

我只知道解决我上面写的第一个例子。
但是当我还想要第二个分组变量时会发生什么?
像按组发生的事件(信件)之类的东西。
group letter  "occurencies within group"  
x A 1
x A 2
x A 3
x B 1
y B 1
y A 1
y A 2

我找到了方法

ave(rep(1,nrow(mydata)),list(mydata$group, mydata$letter), FUN=cumsum)
though it shoould be something easier.

最佳答案

使用 data.table

library(data.table)
setDT(mydata)
mydata[, myorder := 1:.N, by = .(group, letter)]
by参数使表在名为 A 的列的组内处理. .N是该组中的行数(如果 by 参数为空,它将是表中的行数),因此对于每个子表,每一行的索引从 1 到该子表中的行数- table 。
mydata
group letter myorder
1: x A 1
2: x A 2
3: x A 3
4: x B 1
5: y B 1
6: y A 1
7: y A 2

dplyr解决方案几乎相同
mydata %>% 
group_by(group, letter) %>%
mutate(myorder = 1:n())

关于R 按组计算元素的出现次数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32586674/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com