当数据框是小标题时无法识别变量的结构
Structure of variables not recognised when dataframe is a tibble
我创建了一个函数来评估输入变量的结构,然后根据变量的含义、数字的均值和 sd 以及因子的频率和比例执行条件描述性统计。
但是,当数据框是小标题时,我用来识别变量结构的方法似乎不起作用。这是一些玩具数据
set.seed(123)
df <- tibble(a = round(rnorm(5),1),
b = factor(letters[1:5]))
glimpse(df)
# Output
# Rows: 5
# Columns: 2
# $ a <dbl> -0.6, -0.2, 1.6, 0.1, 0.1
# $ b <fct> a, b, c, d, e
现在,如果我们询问 R 每列使用的是什么类型的变量,is.x()
函数套件会失败
is.numeric(df[,"a"])
# [1] FALSE
is.factor(df[,"b"])
# [1] FALSE
但是,如果我们将数据帧转换为 data.frame
类型 object 它会正确识别它们
df <- as.data.frame(df)
is.numeric(df[,"a"])
# [1] TRUE
is.factor(df[,"b"])
# [1] TRUE
现在我当然可以在我的函数中将 data.frame 转换为一个 tibble,但我只是好奇如何获得带有 tibble 或一些 data.frame 的结果等效的解决方法?
答案是使用 [[
对 tibble 或数据框中的列进行子集化,这将为您提供一致的结果。为了区分 dataframe 和 tibble,我们将 tibble 变量称为 df_tib
,将 dataframe 变量称为 df_dat
.
df_tib <- df
df_dat <- data.frame(df)
is.numeric(df_tib[['a']])
#[1] TRUE
is.numeric(df_dat[['a']])
#[1] TRUE
is.factor(df_tib[['b']])
#[1] TRUE
is.factor(df_dat[['b']])
#[1] TRUE
出现问题的原因是它们(数据框和 tibble)在使用 [
子集时如何反应。
df_tib[, 'a']
# A tibble: 5 x 1
# a
# <dbl>
#1 -0.6
#2 -0.2
#3 1.6
#4 0.1
#5 0.1
df_dat[, 'a']
#[1] -0.6 -0.2 1.6 0.1 0.1
df_tib
return 当您使用 [
子集时,它是一个 tibble,而由于您在 df_dat
中只有一个列,它 return 是一个向量。 is.factor
和 is.numeric
总是 return FALSE
在 dataframe/tibble 对象上。
我创建了一个函数来评估输入变量的结构,然后根据变量的含义、数字的均值和 sd 以及因子的频率和比例执行条件描述性统计。
但是,当数据框是小标题时,我用来识别变量结构的方法似乎不起作用。这是一些玩具数据
set.seed(123)
df <- tibble(a = round(rnorm(5),1),
b = factor(letters[1:5]))
glimpse(df)
# Output
# Rows: 5
# Columns: 2
# $ a <dbl> -0.6, -0.2, 1.6, 0.1, 0.1
# $ b <fct> a, b, c, d, e
现在,如果我们询问 R 每列使用的是什么类型的变量,is.x()
函数套件会失败
is.numeric(df[,"a"])
# [1] FALSE
is.factor(df[,"b"])
# [1] FALSE
但是,如果我们将数据帧转换为 data.frame
类型 object 它会正确识别它们
df <- as.data.frame(df)
is.numeric(df[,"a"])
# [1] TRUE
is.factor(df[,"b"])
# [1] TRUE
现在我当然可以在我的函数中将 data.frame 转换为一个 tibble,但我只是好奇如何获得带有 tibble 或一些 data.frame 的结果等效的解决方法?
答案是使用 [[
对 tibble 或数据框中的列进行子集化,这将为您提供一致的结果。为了区分 dataframe 和 tibble,我们将 tibble 变量称为 df_tib
,将 dataframe 变量称为 df_dat
.
df_tib <- df
df_dat <- data.frame(df)
is.numeric(df_tib[['a']])
#[1] TRUE
is.numeric(df_dat[['a']])
#[1] TRUE
is.factor(df_tib[['b']])
#[1] TRUE
is.factor(df_dat[['b']])
#[1] TRUE
出现问题的原因是它们(数据框和 tibble)在使用 [
子集时如何反应。
df_tib[, 'a']
# A tibble: 5 x 1
# a
# <dbl>
#1 -0.6
#2 -0.2
#3 1.6
#4 0.1
#5 0.1
df_dat[, 'a']
#[1] -0.6 -0.2 1.6 0.1 0.1
df_tib
return 当您使用 [
子集时,它是一个 tibble,而由于您在 df_dat
中只有一个列,它 return 是一个向量。 is.factor
和 is.numeric
总是 return FALSE
在 dataframe/tibble 对象上。