r - 在R中按组添加观察数

标签 r data-manipulation

<分区>

这是一个愚蠢的问题,但我是 R 的新手,如果我能弄清楚如何做到这一点,我的生活就会变得更加轻松! 所以这是一些示例数据

data <- read.table(text = "Category Y
 A 5.1
 A 3.14
 A 1.79
 A 3.21
 A 5.57
 B 3.68
 B 4.56
 B 3.32
 B 4.98
 B 5.82
 ",header = TRUE)

我想添加一个列来计算组内观察的数量。这是我想要的样子:

Category    Y    OBS
A          5.1    1
A          3.14   2
A          1.79   3
A          3.21   4
A          5.57   5
B          3.68   1
B          4.56   2
B          3.32   3
B          4.98   4
B          5.82   5

我试过:

data <- data %>% group_by(Category) %>% mutate(count = c(1:length(Category)))

这只是创建另一个编号从 1 到 10 的列,并且

data <- data %>% group_by(Category) %>% add_tally()

这只是创建了另一列全 5

最佳答案

基础 R:

data$OBS <- ave(seq_len(nrow(data)), data$Category, FUN = seq_along)
data
#    Category    Y OBS
# 1         A 5.10   1
# 2         A 3.14   2
# 3         A 1.79   3
# 4         A 3.21   4
# 5         A 5.57   5
# 6         B 3.68   1
# 7         B 4.56   2
# 8         B 3.32   3
# 9         B 4.98   4
# 10        B 5.82   5

顺便说一句:可以使用框架的任何列作为第一个参数,包括 ave(data$Category, data$Category, FUN=seq_along),但是 ave根据输入的 class 选择其输出 class,因此使用字符串作为第一个参数将导致返回字符串:

ave(data$Category, data$Category, FUN = seq_along)
#  [1] "1" "2" "3" "4" "5" "1" "2" "3" "4" "5"

虽然不令人发指,但它需要是一个有意的选择。由于您似乎希望该列中有一个整数,因此我选择了最简单的整数输入、整数输出方法。它还可以使用 rep(1L,nrow(data)) 或任何既是整数又与帧中的行数长度相同的东西,因为 seq_along (我选择的功能)不会关心。

关于r - 在R中按组添加观察数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66495315/

相关文章:

r - 使用 big.matrix 对象计算欧几里得距离矩阵

r - 查找一列的最大值(按组)并将值插入到 R 中的另一个数据框中

r - ggplot2 以轴为单位指定点大小

r - 将数字月份转换为月份缩写

regex - 删除两个括号之间的所有文本

通过另一个向量中包含的字符串动态引用向量名称

javascript - 如何找到两个 JavaScript 对象数组之间的差异?

R:双枢轴使用 DPLYR?

python - 在 Pandas 数据框上应用正则表达式函数

r - 将图像与 r 中的数据框连接起来