Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/64.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 汇总和绘制开放式问卷调查的观察结果_R_Dataframe - Fatal编程技术网

R 汇总和绘制开放式问卷调查的观察结果

R 汇总和绘制开放式问卷调查的观察结果,r,dataframe,R,Dataframe,摘要 我想创建一个这样的方框图,显示城市每个街区最常见的感知问题 不幸的是,箱线图毫无用处,因为我使用的数据来自一份开放式问卷,它有两个主要问题: 有很多不相关的答案(不相关的我指的是那些只有一个或几个人使用的答案) 有些问题涉及相同的概念,但被重新表述为不同的内容,因此被视为不同的内容 为了使其更有用,我想将不相关的答案聚合到一个组中“例如:其他问题,并重命名具有相同含义的问题,以便它们的措辞准确,从而可以正确显示在条形图中。不幸的是,我没有成功地这样做 详细说明 让我们看一看示例代码(数据帧

摘要

我想创建一个这样的方框图,显示城市每个街区最常见的感知问题

不幸的是,箱线图毫无用处,因为我使用的数据来自一份开放式问卷,它有两个主要问题:

  • 有很多不相关的答案(不相关的我指的是那些只有一个或几个人使用的答案)
  • 有些问题涉及相同的概念,但被重新表述为不同的内容,因此被视为不同的内容
  • 为了使其更有用,我想将不相关的答案聚合到一个组中“例如:
    其他问题
    ,并重命名具有相同含义的问题,以便它们的措辞准确,从而可以正确显示在条形图中。不幸的是,我没有成功地这样做

    详细说明

    让我们看一看示例代码(数据帧上的名称只是示例:为了清晰起见,我对它们进行了修改,以便更容易理解两个或多个问题是相关的,但实际术语并不总是从正则表达式推导出来):

    这将导致以下数据帧:

    > problems
    Source: local data frame [27 x 2]
    
              value Total
    1     Problem 1   282
    2     Problem 3   268
    3     Problem 2   186
    4   No problems   160
    5     Problem 4    76
    6     Problem 5    68
    7     Problem 6     6
    8     Problem 7     5
    9  Doesn't know     4
    10    Problem 8     2
    ..          ...   ...
    > 
    
    如图所示,我们有27个问题,如果仔细研究,我们可以建立一些小组:

  • 相关数据:问题1至7+
    无问题
    不知道
  • 概要:我们有
    问题9
    问题9'
    问题9'
    问题9'
    (除其他外)
  • 不相关的数据,应该在一个标签下分组,如“其他问题”:问题12到18
  • 我建议的方法

    为了克服这两个问题,我认为我可以这样做:

    为了处理同义词,我考虑将同义词值重命名为一个值,可能使用
    重估
    命令,如下所示:

    df$Problems = revalue(df$Problems, c('Problem 9’' = 'Problem 9',
                                         'Problem 9’’' = 'Problem 9',
                                         'Problem 9’’’' = 'Problem 9'))
    
    然而,作为一名R新手(也是编程语言的新手),我认为应该有一种更快的方法来实现这一点,因为维护“同义词词典”的任务将非常繁琐,并且在收到更多回复时会越来越多

    为了处理不相关的答案,我可以采取类似的方法,并将其重新评估为
    其他问题
    ,但我希望以自动方式进行评估,因为随着问卷尚未完成,不相关术语的列表将不断增加,并且我无法手动映射所有问题(例如:映射所有由少于5人投票的值。
    Total<5
    )。我想我应该创建一个函数并使用一个控制结构(
    for…in
    ),但我还没有成功

    由于我需要显示按社区分组的答案的箱线图,我恐怕无法使用
    问题
    数据框。因此,尽管计算每个问题的总投票数很有用,但我不知道如何处理它,只能将其用作信息数据。另一方面,我无法确定答案是否为irr仅基于每个社区收到的回复,因为这会使结果产生偏差,因为预计不同的社区可能会有不同的问题


    对这两个问题的任何帮助都将不胜感激。谢谢我查看了您的数据和代码。您的数据框架,
    问题
    得到了
    问题9'
    问题7'
    等等。因此,您想要的是删除
    '
    '
    。这是您的任务之一。您可以通过以下方法完成此任务:放电线

    problems$value <- gsub(pattern = "’+|'+", replacement = "", x = problems$value)
    
    数据

    problems <- structure(list(value = c("Problem 1", "Problem 3", "Problem 2", 
    "No problems", "Problem 4", "Problem 5", "Problem 6", "Problem 7", 
    "Doesn't know", "Problem 8", "Problem 9", "Problem 9’", "Other problems", 
    "Problem 10", "Problem 10’", "Problem 11", "Problem 11'", "Problem 12", 
    "Problem 13", "Problem 14", "Problem 15", "Problem 16", "Problem 17", 
    "Problem 18", "Problem 7'", "Problem 9’’", "Problem 9’’’"
    ), Total = c(282L, 268L, 186L, 160L, 76L, 68L, 6L, 5L, 4L, 2L, 
    2L, 2L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 
    1L)), class = c("tbl_df", "tbl", "data.frame"), row.names = c(NA, 
    -27L), .Names = c("value", "Total"))
    

    问题#2个不相关的答案:您可以通过执行
    %>%mutate(value=ifelse)等操作来聚合它们(非常感谢你,lukeA。我将看一看RecordLinkage教程,因为它看起来很复杂,但非常适合。我真的很喜欢你展示的变异代码,非常有用。不幸的是,我不能使用它,因为这将消除每个社区获得不到2票的任何问题,而我应该消除任何重新投票的问题总共只得到了不到两张选票。(我已经更新了解释)。你能帮我一下吗?谢谢你,爵士。不幸的是,我不能这样做,因为问题的名称完全不同(我刚刚使用了
    问题9
    问题9'
    ,因为最初的答案是西班牙语,对这里的大多数读者来说可能没有任何意义。我不确定我是否可以使用问题数据框,因为我需要使用
    df
    进行进一步的操作,比如创建一个按邻里分组的答案的方框图。恐怕我不能使用re。)虽然我以后会记下你的答案,因为这是我想学的东西。我已经用这个更新了我的问题info@CarlosCámara感谢您的留言。我添加了另一个解决方案。请告诉我新的解决方案是否能达到您的预期效果。如果可以,您所需要的只是处理图形cod感谢ggplot2或其他。再次感谢,jazzurro。您的解决方案非常有趣。不幸的是,我不能按现状使用它,因为这不允许我将问题按邻域进行分层,如果我将它应用于
    df
    ,它将删除任何每个邻域获得少于5票的问题,而我应该删除任何具有r的问题总共得到不到两票。(我更新了解释).你也能帮我吗?@CarlosCámara你能上传一个最小的可复制数据吗?我很乐意帮助你,但如果没有你的真实数据,我很难准确地看到你在寻找什么。如果你能留下一个预期的输出,这将有助于用户了解你在尝试做什么。复制完所有内容后从零开始,您的代码运行良好,除了同义词部分
    problems$value[which(problems$Total < 5)] <- "Other problems"
    
    problems <- structure(list(value = c("Problem 1", "Problem 3", "Problem 2", 
    "No problems", "Problem 4", "Problem 5", "Problem 6", "Problem 7", 
    "Doesn't know", "Problem 8", "Problem 9", "Problem 9’", "Other problems", 
    "Problem 10", "Problem 10’", "Problem 11", "Problem 11'", "Problem 12", 
    "Problem 13", "Problem 14", "Problem 15", "Problem 16", "Problem 17", 
    "Problem 18", "Problem 7'", "Problem 9’’", "Problem 9’’’"
    ), Total = c(282L, 268L, 186L, 160L, 76L, 68L, 6L, 5L, 4L, 2L, 
    2L, 2L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 
    1L)), class = c("tbl_df", "tbl", "data.frame"), row.names = c(NA, 
    -27L), .Names = c("value", "Total"))
    
    count(df, Neighborhoods, Problems) -> temp
    
    temp$Problems <- gsub(pattern = "’+|'+", replacement = "", x = temp$Problems)
    
    temp$Problems[which(temp$n < 5)] <- "Other problems"
    
    group_by(temp, Neighborhoods, Problems) %>%
    summarize(Total = sum(n)) -> temp2