【问题标题】:Dynamic R histogram from dataframe created using LimeSurvey API response来自使用 LimeSurvey API 响应创建的数据帧的动态 R 直方图
【发布时间】:2017-02-28 12:19:26
【问题描述】:

实现了我的目标的第一步(感谢@akrun),但我似乎无法完全越过球门线!继续我的第一个问题很快就得到了回答,但我仍然无法创建直方图。

这是我希望动态输出看起来像的一个工作示例:

library(dplyr)
library(ggplot2)
library(tidyr)
df <- data.frame(timeline = Sys.Date() - 1:10,
                 q3 = sample(c("Yes", "No"), size = 10, replace = T),
                 q4 = sample(c("Yes", "No"), size = 10, replace = T),
                 q5 = sample(c("Yes", "No"), size = 10, replace = T),
                 q6 = sample(c("Yes", "No"), size = 10, replace = T),
                 q7 = sample(c("Yes", "No"), size = 10, replace = T),
                 q8 = sample(c("Yes", "No"), size = 10, replace = T),

                 stringsAsFactors = F) %>%
    mutate(q3 = ifelse(q3 == "Yes", 1, 0),
           q4 = ifelse(q4 == "Yes", 1, 0),
           q5 = ifelse(q5 == "Yes", 1, 0),
           q6 = ifelse(q6 == "Yes", 1, 0),
           q7 = ifelse(q7 == "Yes", 1, 0),
           q8 = ifelse(q8 == "Yes", 1, 0)

    ) %>%
    gather(key = question, value = value, q3, q4, q5, q6, q7, q8)

g <- ggplot(df, aes(x = timeline, y = value, fill = question)) +
    geom_bar(stat = "identity")

g

这是我在help 之后到达的地方,这是创建的数据框的示例。我不知道列数、名称或观察次数,因此它必须动态工作。

Appetite <- c("No","Yes","No","No","No","No","No","No","No")
Dental.Health <- c("No","Yes","No","No","No","No","Yes","Yes","No")
Dry.mouth <- c("No","Yes","Yes","Yes","Yes","No","Yes","Yes","No")
Mouth.opening <- c("No","No","Yes","Yes","Yes","No","Yes","Yes","No")
Pain.elsewhere <- c("No","Yes","No","No","No","No","No","No","No")
Sleeping <- c("No","No","No","No","No","Yes","No","No","No")
Sore.mouth <- c("No","No","Yes","Yes","No","No","No","No","No")
Swallowing <- c("No","No","No","No","Yes","No","No","No","No")
Cancer.treatment <- c("No","No","Yes","Yes","No","Yes","No","No","No")
Support.for.my.family <- c("No","No","Yes","Yes","No","No","No","No","No")
Fear.of.cancer.coming.back <- c("No","No","Yes","Yes","No","No","Yes","No","No")
Intimacy  <- c("Yes","No","No","No","No","No","No","No","No")
Dentist   <- c("No","Yes","No","No","No","No","No","No","No")
Dietician <- c("No","No","Yes","Yes","No","No","No","No","No")
Date.submitted <- c("2002-07-25 00:00:00",
                 "2002-09-05 00:00:00",
                 "2003-01-09 00:00:00",
                 "2003-01-09 00:00:00",
                 "2003-07-17 00:00:00",
                 "2003-11-06 00:00:00",
                 "2004-12-17 00:00:00",
                 "2005-06-03 00:00:00",
                 "2005-12-17 00:00:00")

theDates <- as.Date(Date.submitted, "%Y-%m-%d %T")

theDataFrame <- data.frame( timeline = as.list(theDates),
                            Appetite,
                            Dental.Health,
                            Dry.mouth,
                            Mouth.opening,
                            Pain.elsewhere,
                            Sleeping,
                            Sore.mouth,
                            Swallowing,
                            Cancer.treatment,
                            Support.for.my.family,
                            Fear.of.cancer.coming.back,
                            Intimacy,
                            Dentist,
                            Dietician,
                            stringsAsFactors = F) %>%
    theDataFrame[-1] <- lapply(theDataFrame[-1], function(x) as.integer(x=="Yes")) %>%
    gather(key = question, value = value, as.list(theDataFrame))

go <- ggplot(theDataFrame, aes(x = timeline, y = value, fill = question)) +
    geom_bar(stat = "identity")

go

我可能误解了 collect 的工作原理,但我似乎无法理解它。

【问题讨论】:

  • 你想达到什么目的?您的工作示例对我有用。你想改变什么?
  • 我需要让第二个工作。我创建的数据框是从 API 调用返回到 LimeSurvey 的一个示例。因为会有不同数量的变量和观察值,所以它必须动态工作(不知道任何列的数量/名称)

标签: r dynamic dataframe ggplot2 limesurvey


【解决方案1】:

In his comment,OP 要求让第二个示例工作。这可以通过对 OP 的代码进行一些修改来完成:

library(tidyr)
library(ggplot2)

Appetite <- c("No","Yes","No","No","No","No","No","No","No")
Dental.Health <- c("No","Yes","No","No","No","No","Yes","Yes","No")
Dry.mouth <- c("No","Yes","Yes","Yes","Yes","No","Yes","Yes","No")
Mouth.opening <- c("No","No","Yes","Yes","Yes","No","Yes","Yes","No")
Pain.elsewhere <- c("No","Yes","No","No","No","No","No","No","No")
Sleeping <- c("No","No","No","No","No","Yes","No","No","No")
Sore.mouth <- c("No","No","Yes","Yes","No","No","No","No","No")
Swallowing <- c("No","No","No","No","Yes","No","No","No","No")
Cancer.treatment <- c("No","No","Yes","Yes","No","Yes","No","No","No")
Support.for.my.family <- c("No","No","Yes","Yes","No","No","No","No","No")
Fear.of.cancer.coming.back <- c("No","No","Yes","Yes","No","No","Yes","No","No")
Intimacy  <- c("Yes","No","No","No","No","No","No","No","No")
Dentist   <- c("No","Yes","No","No","No","No","No","No","No")
Dietician <- c("No","No","Yes","Yes","No","No","No","No","No")
Date.submitted <- 
  c("2002-07-25 00:00:00", "2002-09-05 00:00:00", "2003-01-09 00:00:00",
    "2003-01-09 00:00:00", "2003-07-17 00:00:00", "2003-11-06 00:00:00",
    "2004-12-17 00:00:00", "2005-06-03 00:00:00", "2005-12-17 00:00:00")

theDataFrame <- data.frame(
  timeline = as.Date(Date.submitted),
  Appetite, Dental.Health, Dry.mouth, Mouth.opening, Pain.elsewhere,
  Sleeping, Sore.mouth, Swallowing, Cancer.treatment, Support.for.my.family,
  Fear.of.cancer.coming.back, Intimacy, Dentist, Dietician,
  stringsAsFactors = FALSE)

theDataFrame[-1] <- lapply(theDataFrame[-1], function(x) as.integer(x=="Yes")) 
theDataFrame <- theDataFrame %>% gather(question, value, -timeline)

go <- ggplot(theDataFrame, aes(x = timeline, y = value, fill = question)) +
  geom_col()
go

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-03-30
    • 2020-09-28
    • 1970-01-01
    • 2011-12-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多