gpt4 book ai didi

r - 如何将计数器分配给由因子组合定义的 data.frame 的特定子集?

转载 作者:行者123 更新时间:2023-12-03 21:56:36 24 4
gpt4 key购买 nike

我的问题是:我有一个包含一些因子变量的数据框。我现在想为这个数据框分配一个新向量,它为这些因子变量的每个子集创建一个索引。

   data <-data.frame(fac1=factor(rep(1:2,5)), fac2=sample(letters[1:3],10,rep=T))

给了我类似的东西:
        fac1 fac2
1 1 a
2 2 c
3 1 b
4 2 a
5 1 c
6 2 b
7 1 a
8 2 a
9 1 b
10 2 c

我想要的是一个组合计数器,它计算每个因素组合的出现。像这样
        fac1 fac2  counter
1 1 a 1
2 2 c 1
3 1 b 1
4 2 a 1
5 1 c 1
6 2 b 1
7 1 a 2
8 2 a 2
9 1 b 2
10 1 a 3

到目前为止,我想过使用 tapply 来获取所有因子组合的计数器,这很好用
counter <-tapply(data$fac1, list(data$fac1,data$fac2), function(x) 1:length(x))

但我不知道如何在不使用低效循环的情况下将计数器列表(例如未列出)分配给数据帧中的组合:)

最佳答案

这是 ave() 的工作功能:

# Use set.seed for reproducible examples 
# when random number generation is involved
set.seed(1)
myDF <- data.frame(fac1 = factor(rep(1:2, 7)),
fac2 = sample(letters[1:3], 14, replace = TRUE),
stringsAsFactors=FALSE)
myDF$counter <- ave(myDF$fac2, myDF$fac1, myDF$fac2, FUN = seq_along)
myDF
# fac1 fac2 counter
# 1 1 a 1
# 2 2 b 1
# 3 1 b 1
# 4 2 c 1
# 5 1 a 2
# 6 2 c 2
# 7 1 c 1
# 8 2 b 2
# 9 1 b 2
# 10 2 a 1
# 11 1 a 3
# 12 2 a 2
# 13 1 c 2
# 14 2 b 3

注意使用 stringsAsFactors=FALSEdata.frame()步。如果你没有,你仍然可以得到输出: myDF$counter <- ave(as.character(myDF$fac2), myDF$fac1, myDF$fac2, FUN = seq_along) .

关于r - 如何将计数器分配给由因子组合定义的 data.frame 的特定子集?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13071669/

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