系列函数(n()
, cur_group()
, cur_group_id()
, cur_group_rows()
, cur_column()
)是dplyr
包中用于在特定上下文(如summarise()
和mutate()
等)中获取关于当前组或变量的信息的函数。下面结合例子逐一解释它们的用途:
1.n()
: 返回当前组的大小,即当前组内的观测数量。
xxxxxxxxxx
df <- tibble(
g = sample(rep(letters[1:3], 1:3)),
x = runif(6),
y = runif(6)
)
gf <- df %>% group_by(g)
gf %>% summarise(n = n())
这个例子中,summarise(n = n())
返回了每个组的观测数量。
2.cur_group()
: 返回当前组的键,是一个tibble,每个组变量对应一列。
xxxxxxxxxx
gf %>% summarise(data = list(cur_group()))
这个例子中,summarise(data = list(cur_group()))
返回了当前组的键,以列表形式存储。
3.cur_group_id()
: 返回当前组的唯一数字标识符。
xxxxxxxxxx
gf %>% mutate(id = cur_group_id())
这个例子中,mutate(id = cur_group_id())
为每个观测添加了一个表示当前组的唯一数字标识符。
4.cur_group_rows()
: 返回当前组的行索引。
xxxxxxxxxx
gf %>% reframe(row = cur_group_rows())
这个例子中,reframe(row = cur_group_rows())
返回了当前组的行索引。
补充:reframe() 函数:
reframe()
函数用于重新定义数据框的结构,包括列名、列的顺序等。它允许你指定新的列名和列的顺序,以便重新构建数据框的结构。
xxxxxxxxxx
library(dplyr)
df <- data.frame(
A = c(1, 2, 3),
B = c(4, 5, 6),
C = c(7, 8, 9)
)
df %>%
reframe(X = A, Y = B, Z = C)
上述例子中,reframe(X = A, Y = B, Z = C)
将重新构建数据框,将列 A 重新命名为 X,列 B 重新命名为 Y,列 C 重新命名为 Z。
reframe()
主要用于重新定义数据框的结构,包括列名和顺序。
5.cur_column()
: 在across()
中使用,返回当前列的名称。
xxxxxxxxxx
gf %>% mutate(across(everything(), ~ paste(cur_column(), round(.x, 2))))
这个例子中,across()
函数中使用了cur_column()
来获取当前列的名称,然后对每列应用了相应的操作。
补充:across() 函数:
across()
函数主要用于在数据框中同时对多个列进行相同的操作。它适用于 mutate()
、summarise()
和其他一些函数,允许你指定多个列并对它们应用相同的函数或操作
xxxxxxxxxx
library(dplyr)
df <- data.frame(
A = c(1, 2, 3),
B = c(4, 5, 6),
C = c(7, 8, 9)
)
df %>%
mutate(across(c(A, B, C), ~ . * 2))
上述例子中,across(c(A, B, C), ~ . * 2)
将对 A、B 和 C 列都应用了乘以2的操作。
across()
主要用于对多个列进行相同的操作