如何在 r 的函数中编写 if_else 条件,然后应用于数据帧的所有变量?
How to write if_else condition within a function in r and then apply on all variables of a dataframe?
我正在写一个 function
来查找一个变量的所有 elements/levels 的 frequency
如果它是 character
并且如果它是 numeric
则跳过它但是越来越条件错误。
dummy_df <- data.frame(gender_vector = c("Male", "Female", "Female", "Male", "Male"),
color_vector = c('blue', 'red', 'green', 'white', 'black'),
num_vector = c(1,2,3,4,5)
)
dummy_df
gender_vector color_vector num_vector
1 Male blue 1
2 Female red 2
3 Female green 3
4 Male white 4
5 Male black 5
代码:
尝试过:
count_char_cols_fn2 <- function(df,selected_var){
df %>%
if_else(class(.data[[selected_var]]) == "character",
count(.data[[selected_var]]),
)
}
purrr::map(df = dummy_df,
.x = names(dummy_df),
和
count_char_cols_fn2 <- function(df,selected_var){
df %>%
if_else(class(df$selected_var) == "character",
count(.data[[selected_var]]),
)
}
purrr::map(df = dummy_df,
.x = names(dummy_df),
.f = count_char_cols_fn2)
两次代码尝试均出错:
错误:condition
必须是逻辑向量,而不是 data.frame
对象。
这在哪里工作:
class(dummy_df$gender_vector)
[1] "character"
由于您一次检查一列的 class,因此请使用 if
而不是 if_else
。您也可以使用 is.character
来检查 class 是否属于字符类型。
library(dplyr)
count_char_cols_fn2 <- function(df,selected_var){
if(is.character(df[[selected_var]]))
count(df, .data[[selected_var]])
}
purrr::map(names(dummy_df),count_char_cols_fn2, df = dummy_df)
#[[1]]
# gender_vector n
#1 Female 2
#2 Male 3
#[[2]]
# color_vector n
#1 black 1
#2 blue 1
#3 green 1
#4 red 1
#5 white 1
#[[3]]
#NULL
我们可以在 dplyr
中做到这一点
library(dplyr)
dummy_df %>%
summarise(across(where(is.character), ~ list(table(.))))
我正在写一个 function
来查找一个变量的所有 elements/levels 的 frequency
如果它是 character
并且如果它是 numeric
则跳过它但是越来越条件错误。
dummy_df <- data.frame(gender_vector = c("Male", "Female", "Female", "Male", "Male"),
color_vector = c('blue', 'red', 'green', 'white', 'black'),
num_vector = c(1,2,3,4,5)
)
dummy_df
gender_vector color_vector num_vector
1 Male blue 1
2 Female red 2
3 Female green 3
4 Male white 4
5 Male black 5
代码:
尝试过:
count_char_cols_fn2 <- function(df,selected_var){
df %>%
if_else(class(.data[[selected_var]]) == "character",
count(.data[[selected_var]]),
)
}
purrr::map(df = dummy_df,
.x = names(dummy_df),
和
count_char_cols_fn2 <- function(df,selected_var){
df %>%
if_else(class(df$selected_var) == "character",
count(.data[[selected_var]]),
)
}
purrr::map(df = dummy_df,
.x = names(dummy_df),
.f = count_char_cols_fn2)
两次代码尝试均出错:
错误:condition
必须是逻辑向量,而不是 data.frame
对象。
这在哪里工作:
class(dummy_df$gender_vector)
[1] "character"
由于您一次检查一列的 class,因此请使用 if
而不是 if_else
。您也可以使用 is.character
来检查 class 是否属于字符类型。
library(dplyr)
count_char_cols_fn2 <- function(df,selected_var){
if(is.character(df[[selected_var]]))
count(df, .data[[selected_var]])
}
purrr::map(names(dummy_df),count_char_cols_fn2, df = dummy_df)
#[[1]]
# gender_vector n
#1 Female 2
#2 Male 3
#[[2]]
# color_vector n
#1 black 1
#2 blue 1
#3 green 1
#4 red 1
#5 white 1
#[[3]]
#NULL
我们可以在 dplyr
library(dplyr)
dummy_df %>%
summarise(across(where(is.character), ~ list(table(.))))