使用 pmap() 计算多列的行均值
use pmap() to calculate row means of several columns
我试图更好地理解 pmap()
如何在数据帧中工作,并且在应用 pmap()
计算来自多个列的均值时我得到了一个令人惊讶的结果。
mtcars %>%
mutate(comp_var = pmap_dbl(list(vs, am, cyl), mean)) %>%
select(comp_var, vs, am, cyl)
在上面的例子中,comp_var
等于该行中vs的值,而不是给定行中三个变量的平均值。
我知道我可以使用 ...
获得 comp_var
的准确结果
mtcars %>%
rowwise() %>%
mutate(comp_var = mean(c(vs, am, cyl))) %>%
select(comp_var, vs, am, cyl) %>%
ungroup()
...但我想了解如何在这种情况下应用 pmap()
。
我们需要将 mean
中 x
参数的参数连接为
x: An R object. Currently there are methods for numeric/logical
vectors and date, date-time and time interval objects.
Complex vectors are allowed for ‘trim = 0’, only.
因此,如果我们传递 x1、x2、x3 等参数,它将根据用法进入 ...
参数
mean(x, ...)
例如
mean(5, 8) # x is 5
#[1] 5
mean(8, 5) # x is 8
#[1] 8
mean(c(5, 8)) # x is a vector with 2 values
#[1] 6.5
在 rowwise
函数中,OP 将元素连接到一个向量中,而 pmap
则保留 mean
应用于第一个参数
out1 <- mtcars %>%
mutate(comp_var = pmap_dbl(list(vs, am, cyl), ~mean(c(...)))) %>%
dplyr::select(comp_var, vs, am, cyl)
-检查 rowwise
输出
out2 <- mtcars %>%
rowwise() %>%
mutate(comp_var = mean(c(vs, am, cyl))) %>%
dplyr::select(comp_var, vs, am, cyl) %>%
ungroup()
all.equal(out1, out2, check.attributes = FALSE)
#[1] TRUE
我试图更好地理解 pmap()
如何在数据帧中工作,并且在应用 pmap()
计算来自多个列的均值时我得到了一个令人惊讶的结果。
mtcars %>%
mutate(comp_var = pmap_dbl(list(vs, am, cyl), mean)) %>%
select(comp_var, vs, am, cyl)
在上面的例子中,comp_var
等于该行中vs的值,而不是给定行中三个变量的平均值。
我知道我可以使用 ...
获得comp_var
的准确结果
mtcars %>%
rowwise() %>%
mutate(comp_var = mean(c(vs, am, cyl))) %>%
select(comp_var, vs, am, cyl) %>%
ungroup()
...但我想了解如何在这种情况下应用 pmap()
。
我们需要将 mean
中 x
参数的参数连接为
x: An R object. Currently there are methods for numeric/logical vectors and date, date-time and time interval objects. Complex vectors are allowed for ‘trim = 0’, only.
因此,如果我们传递 x1、x2、x3 等参数,它将根据用法进入 ...
参数
mean(x, ...)
例如
mean(5, 8) # x is 5
#[1] 5
mean(8, 5) # x is 8
#[1] 8
mean(c(5, 8)) # x is a vector with 2 values
#[1] 6.5
在 rowwise
函数中,OP 将元素连接到一个向量中,而 pmap
则保留 mean
应用于第一个参数
out1 <- mtcars %>%
mutate(comp_var = pmap_dbl(list(vs, am, cyl), ~mean(c(...)))) %>%
dplyr::select(comp_var, vs, am, cyl)
-检查 rowwise
输出
out2 <- mtcars %>%
rowwise() %>%
mutate(comp_var = mean(c(vs, am, cyl))) %>%
dplyr::select(comp_var, vs, am, cyl) %>%
ungroup()
all.equal(out1, out2, check.attributes = FALSE)
#[1] TRUE