【发布时间】:2017-08-28 23:42:24
【问题描述】:
我有一个巨大的列表,其中包含我通过运行 for 循环输出的各种 tibbles。此列表中的小标题是使用count() 和group_by_() 的结果,并按类别显示a 在各种设施工作和不工作的人数,但列表的每个元素都有可变数量的名称不同的行和一列。
这是我(20 多个元素)列表中的三个元素:
library(plyr)
library(tidyverse)
(Hospital1 <- tibble(a = c("In.City", "In.City", "Likely Move", "Likely Move", "Possibly Move", "Unlikely Move", "Unlikely Move", NA),
Something.Hospital1 = c("Hospital1", NA, "Hospital1", NA, NA, "Hospital1", NA, NA),
n= c(sample(1:100, 8, replace = TRUE))))
(Hospital2 <- tibble(a = c("In.City", "In.City", "Likely Move", "Likely Move", "Possibly Move", "Unlikely Move", NA),
Something.Hospital2 = c("Hospital2", NA, "Hospital2", NA, NA, NA, NA),
n= c(sample(1:100, 7, replace = TRUE))))
(Hospital3 <- tibble(a = c("In.City", "Likely Move", "Unlikely Move", "Possibly Move", NA),
Something.Hospital3 = as.character(c(NA, NA, NA, NA, NA)),
n= c(sample(1:100, 5, replace = TRUE))))
#What my data actually looks like
(example.list <- list(Hospital1, Hospital2, Hospital3))
第 3 列中的 n 的值与每个列表元素的第二列中的 NA 不相邻最重要。到目前为止,我真的很难将这些变成 ggplot2 可以使用它们的形式。因为我正在使用大约 20 个列表元素,所以我觉得我需要在代码中使用列表结构,并且能够在需要时迭代或创建函数。我尝试过:
1) 使用 cbind(example.list[[1:3]]) 和 bind_cols([[1:3]]) 将它们绑定到一个 tibble 中,尽管由于行数不同(与单括号相同),两者都失败了。
2) 单独绘制这些元素,尽管 ggplot2 使用列表失败。
3) 使用list2env(example.list[1:3], envir = .GlobalEnv) 将它们拆分为单独的数据帧,但这给了我错误
names(x) must be a character vector of the same length as x
4) 执行 for 循环 left_join() 但要这样做,我需要一个密钥,我可以使用类似于 cumsum() 的东西形成它,但用于字符单元格。应该是这样的
a Something.Hospital1 n match.key
<chr> <chr> <int> <dbl>
1 In.City Hospital1 40 1
2 In.City <NA> 25 2
3 Likely Move Hospital1 17 1
4 Likely Move <NA> 56 2
5 Possibly Move Hospital1 59 1
5) 我尝试使用ddply(output[[10]], .(crosstab, n), nrow),但 V1 对这样的合并没有帮助。
crosstab n V1
1 In.Camden 14 1
2 In.Camden 139 1
3 Likely Move 4 1
4 Likely Move 171 1
在我看来,我希望我的数据看起来像这样,并列出所有可能性。然后我可以使用tidyr() 把它变成ggplot 形式
a Something.Hospital1 n1 Something.Hospital2 n2 Something.Hospital3 n3
<chr> <chr> <int> <chr> <int> <chr> <int>
1 In.City Hospital1 39 Hospital2 24 Hospital3 13
2 In.City <NA> 86 <NA> 82 <NA> 85
3 Likely Move Hospital1 77 Hospital2 16 Hospital3 17
4 Likely Move <NA> 4 <NA> 78 <NA> 49
5 Possibly Move Hospital1 100 Hospital2 79 Hospital3 95
6 Possibly Move <NA> 49 <NA> 31 <NA> 62
7 Unlikely Move Hospital1 82 Hospital2 3 Hospital3 96
8 Unlikely Move <NA> 27 <NA> 30 <NA> 39
9 <NA> <NA> 55 <NA> 96 <NA> 47
我完全不懂lapply 和相关的,所以如果你建议它们,请清楚如何使用它们。我更喜欢 dplyr,因为这是我最了解的。
非常感谢您的帮助
【问题讨论】:
-
所需输出的 col A 中的
NA指的是什么?需要吗?由于 col A 是索引,因此使用NA值通常是不好的做法。 -
是的,它确实指的是某些东西。因为它来自一项调查,这意味着对调查做出回应但没有回答可以对他们进行分类的问题的人。他们可能仍然回答了其他问题,选择了他们在哪些医院工作
-
澄清
Something.Hospital列存在真正的NA值?并且列名实际上是这样表示的?在我看来,如果列名是“医院 1”,那么该行中的所有值都是“医院 1”......除非列名比这更通用。 -
在
n1中,有 39 人在 Hospital1 工作并住在“城市”,而 86 人住在“城市”但不在医院 1 工作。因此了解这些 NA 很有帮助。实际的列名相当讨厌,因为它们是冗长的调查问题 -
为什么
Something.Hospital3列都是NAint 开头,但在您想要的输出中,有些行显示Hospital3?
标签: r list ggplot2 dplyr tibble