如何根据带有 apply 或 purrr 函数的自定义函数获取包含多行的数据框?
How to get a dataframe with multiple rows based on custom function with apply or purrr functions?
我想要一个包含变量名、均值和标准差的数据框。为此,我创建了 descriptives
函数:
library(tidyverse)
library(labelled)
data <- read_spss("http://staff.bath.ac.uk/pssiw/stats2/SAQ.sav")
descriptives <- function(data, var) {
data %>%
select({{var}}) %>%
drop_na() %>%
summarize(Label = labelled::var_label({{var}}), Mean = mean({{var}}), `Std Dev` = sd({{var}}))
}
descriptives(data, Q01)
我试图将此函数映射到所有变量 Q01:Q23
但我收到此错误:Error in is_quosure(x) : argument "x" is missing, with no default
data %>%
select(Q01:Q23) %>%
map_dfr(descriptives(data))
我们可以在将函数从 {{}}
更改为 ensym
后循环遍历 map
中的名称,并使用 !!
进行评估
library(dplyr)
library(purrr)
library(haven)
library(labelled)
map_dfr(names(data), ~ descriptives(data, !!.x))
-输出
# A tibble: 23 x 3
Label Mean `Std Dev`
<chr> <dbl> <dbl>
1 Statiscs makes me cry 2.37 0.828
2 My friends will think I'm stupid for not being able to cope with SPSS 1.62 0.851
3 Standard deviations excite me 2.59 1.08
4 I dream that Pearson is attacking me with correlation coefficients 2.79 0.949
5 I don't understand statistics 2.72 0.965
6 I have little experience of computers 2.23 1.12
7 All computers hate me 2.92 1.10
8 I have never been good at mathematics 2.24 0.873
9 My friends are better at statistics than me 2.85 1.26
10 Computers are useful only for playing games 2.28 0.877
# … with 13 more rows
-使用的函数
descriptives <- function(data, var) {
var <- rlang::ensym(var)
data %>%
select(!! var) %>%
drop_na() %>%
summarize(Label = labelled::var_label(!!var),
Mean = mean(!!var), `Std Dev` = sd(!!var))
}
我想要一个包含变量名、均值和标准差的数据框。为此,我创建了 descriptives
函数:
library(tidyverse)
library(labelled)
data <- read_spss("http://staff.bath.ac.uk/pssiw/stats2/SAQ.sav")
descriptives <- function(data, var) {
data %>%
select({{var}}) %>%
drop_na() %>%
summarize(Label = labelled::var_label({{var}}), Mean = mean({{var}}), `Std Dev` = sd({{var}}))
}
descriptives(data, Q01)
我试图将此函数映射到所有变量 Q01:Q23
但我收到此错误:Error in is_quosure(x) : argument "x" is missing, with no default
data %>%
select(Q01:Q23) %>%
map_dfr(descriptives(data))
我们可以在将函数从 {{}}
更改为 ensym
后循环遍历 map
中的名称,并使用 !!
library(dplyr)
library(purrr)
library(haven)
library(labelled)
map_dfr(names(data), ~ descriptives(data, !!.x))
-输出
# A tibble: 23 x 3
Label Mean `Std Dev`
<chr> <dbl> <dbl>
1 Statiscs makes me cry 2.37 0.828
2 My friends will think I'm stupid for not being able to cope with SPSS 1.62 0.851
3 Standard deviations excite me 2.59 1.08
4 I dream that Pearson is attacking me with correlation coefficients 2.79 0.949
5 I don't understand statistics 2.72 0.965
6 I have little experience of computers 2.23 1.12
7 All computers hate me 2.92 1.10
8 I have never been good at mathematics 2.24 0.873
9 My friends are better at statistics than me 2.85 1.26
10 Computers are useful only for playing games 2.28 0.877
# … with 13 more rows
-使用的函数
descriptives <- function(data, var) {
var <- rlang::ensym(var)
data %>%
select(!! var) %>%
drop_na() %>%
summarize(Label = labelled::var_label(!!var),
Mean = mean(!!var), `Std Dev` = sd(!!var))
}