首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >R:自动识别“类型”变量

R:自动识别“类型”变量
EN

Stack Overflow用户
提问于 2021-07-20 06:48:58
回答 2查看 98关注 0票数 1

我正在使用R编程语言。假设我有以下数据:

代码语言:javascript
复制
#create data
var_1 = rnorm(1000,10,10)

var_2 <- c("1","0")
var_2 <- sample(var_1, 1000, replace=TRUE, prob=c(0.3, 0.7))


response<- c("2", "1","0")
response <- sample(response, 1000, replace=TRUE, prob=c(0.3, 0.4, 0.3))

my_data = data.frame(var_1, var_2, response)

my_data$var_2 = as.factor(my_data$var_2)
my_data$response = as.factor(my_data$response)

我编写了以下代码,为“因子”变量生成直方图,为“数字”变量绘制密度图:

代码语言:javascript
复制
  #load libraries
library(ggplot2)
library(gridExtra)


#first plot
p1 = ggplot(my_data) +
    geom_histogram(aes(x=var_1, fill=response), 
                   colour="grey50", alpha=0.5, position="identity")+ ggtitle("var_2 vs response")

#second plot (for some reason, this does not look correct?)

p2 = ggplot(my_data, aes(x = var_2, fill = response)) + geom_density(alpha = 0.5) + ggtitle("var_1 vs response")

grid.arrange(p1, p2, ncol=2) 

我的问题是:假设我有一个有许多“因素”变量和“数值”变量的数据集。R中是否有函数可以自动检测变量是“因子”还是“数字”,然后绘制相应的图形(使用“响应变量”的颜色填充)?

如果不手动指示R为每个变量“类型”创建正确的图形类型,那么是否有可能自动生成这些图?(例如,假设一个数据集中有10个变量,是否有可能生成10个这样的图表?)

谢谢

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2021-07-20 06:56:32

你可以用lapply -

代码语言:javascript
复制
library(ggplot2)
library(gridExtra)

var_cols <- grep('var', names(my_data), value = TRUE)

do.call(grid.arrange, c(lapply(var_cols, function(x) {
  if(is.numeric(my_data[[x]])) {
    ggplot(my_data) +
      geom_histogram(aes(x=.data[[x]], fill=response), 
                     colour="grey50", alpha=0.5, position="identity") + 
      ggtitle(paste(x, 'vs response'))
  }
  else {
    ggplot(my_data, aes(x = .data[[x]], fill = response)) + 
      geom_density(alpha = 0.5) + 
      ggtitle(paste(x, 'vs response'))
  }
}), ncol = length(var_cols)))

票数 4
EN

Stack Overflow用户

发布于 2021-07-20 08:44:21

我们可以尝试这个解决方案:

将tibble

  • type.convert(as.is = TRUE)转换为
  1. 以获得最真实的类型
  2. 将所有整数转换为跨所有列

的因子

代码语言:javascript
复制
library(tidyverse)
library(gridExtra)

my_data1 <- my_data %>% 
  as_tibble() %>% 
  type.convert(as.is = TRUE) %>% 
  mutate(across(where(is.integer), factor))



#first plot
p1 = ggplot(my_data1) +
  geom_histogram(aes(x=var_1, fill=response), 
                 colour="grey50", alpha=0.5, position="identity")+ ggtitle("var_2 vs response")

#second plot (for some reason, this does not look correct?)

p2 = ggplot(my_data1, aes(x = var_2, fill = response)) + geom_density(alpha = 0.5) + ggtitle("var_1 vs response")

grid.arrange(p1, p2, ncol=2) 

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68450631

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档