覆盖 dplyr 中的“变量未显示”,以显示 df 中的所有列
Posted
技术标签:
【中文标题】覆盖 dplyr 中的“变量未显示”,以显示 df 中的所有列【英文标题】:Overriding "Variables not shown" in dplyr, to display all columns from df 【发布时间】:2014-04-23 15:43:33 【问题描述】:当我在本地数据框中有一列时,有时我会收到消息Variables not shown
,例如这个(荒谬的)示例只需要足够的列。
library(dplyr)
library(ggplot2) # for movies
movies %.%
group_by(year) %.%
summarise(Length = mean(length), Title = max(title),
Dramaz = sum(Drama), Actionz = sum(Action),
Action = sum(Action), Comedyz = sum(Comedy)) %.%
mutate(Year1 = year + 1)
year Length Title Dramaz Actionz Action Comedyz
1 1898 1.000000 Pack Train at Chilkoot Pass 1 0 0 2
2 1894 1.000000 Sioux Ghost Dance 0 0 0 0
3 1902 3.555556 Voyage dans la lune, Le 1 0 0 2
4 1893 1.000000 Blacksmith Scene 0 0 0 0
5 1912 24.382353 Unseen Enemy, An 22 0 0 4
6 1922 74.192308 Trapped by the Mormons 20 0 0 16
7 1895 1.000000 Photographe 0 0 0 0
8 1909 9.266667 What Drink Did 14 0 0 7
9 1900 1.437500 Uncle Josh's Nightmare 2 0 0 5
10 1919 53.461538 When the Clouds Roll by 17 2 2 29
.. ... ... ... ... ... ... ...
Variables not shown: Year1 (dbl)
我想见Year1
!如何查看所有列,最好是默认。
【问题讨论】:
【参考方案1】:你可能会喜欢glimpse
:
> movies %>%
+ group_by(year) %>%
+ summarise(Length = mean(length), Title = max(title),
+ Dramaz = sum(Drama), Actionz = sum(Action),
+ Action = sum(Action), Comedyz = sum(Comedy)) %>%
+ mutate(Year1 = year + 1) %>% glimpse()
Variables:
$ year (int) 1893, 1894, 1895, 1896, 1897, 1898, 1899, 1900, 1901, 1902,...
$ Length (dbl) 1.000000, 1.000000, 1.000000, 1.307692, 1.000000, 1.000000,...
$ Title (chr) "Blacksmith Scene", "Sioux Ghost Dance", "Photographe", "Ve...
$ Dramaz (int) 0, 0, 0, 1, 0, 1, 2, 2, 5, 1, 2, 3, 4, 5, 1, 8, 14, 14, 14,...
$ Actionz (int) 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 3, 0, 0, 0, 0, 3, 0, 0, 1, 0,...
$ Action (int) 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 3, 0, 0, 0, 0, 3, 0, 0, 1, 0,...
$ Comedyz (int) 0, 0, 0, 1, 2, 2, 1, 5, 8, 2, 8, 10, 6, 2, 6, 8, 7, 2, 2, 4...
$ Year1 (dbl) 1894, 1895, 1896, 1897, 1898, 1899, 1900, 1901, 1902, 1903,...NULL
【讨论】:
+1 用于发现glimpse
。就个人而言,我喜欢查看所有列的主要原因是作为一种方便的方式来检查我添加的列(通过汇总或变异)是否确实完成了我的预期。所以glimpse
不太适合这个。
对于最新的 dplyr 版本,使用 %>% 代替 %.%【参考方案2】:
movies %.% group_by(year) %.% ....... %.% print.default
dplyr
使用dplyr:::print.tbl_df
而不是默认打印选项,以确保您的屏幕不会因大量数据集而过载。当你最终将你的东西缩减到你想要的并且不想再从自己的错误中解脱出来时,只需在最后贴上print.default
即可吐出所有内容。
顺便说一句,methods(print)
显示有多少包需要编写自己的 print
函数(想想,例如,igraph
或 xts
--- 这些是新的数据类型,所以你需要告诉他们如何显示在屏幕上)。
HTH 下一个谷歌人。
【讨论】:
【参考方案3】:(现在)有一种方法可以覆盖打印出来的列的宽度。如果你运行这个命令,一切都会好起来的
options(dplyr.width = Inf)
我写了here。
【讨论】:
我认为应该是带有“s”的options
。我无法编辑,因为编辑必须是 10 个字符。
这是一个不错的选择,但是当您有太多列时就不是那么有用了。它发生在我的 df 中,显示了大约 200 列,但行和列之间的顺序丢失了。此外,由于字符过多,大多数行在某些时候被截断。我想分享命令以恢复默认行为,即:'options(dplyr.width = NULL)'【参考方案4】:
所以,这有点旧,但我在寻找相同问题的答案时发现了这一点。我想出了这个解决方案,它坚持管道的精神,但在功能上与公认的答案相同(请注意,管道符号 %.%
已弃用,取而代之的是 %>%
)
movies %>%
group_by(year) %>%
summarise(Length = mean(length), Title = max(title),
Dramaz = sum(Drama), Actionz = sum(Action),
Action = sum(Action), Comedyz = sum(Comedy)) %>%
mutate(Year1 = year + 1) %>%
as.data.frame %>%
head
【讨论】:
【参考方案5】:dplyr
对dplyr
对象有自己的打印功能。在这种情况下,作为操作结果的对象是tbl_df
。那么匹配的打印函数就是dplyr:::print.tbl_df
。这表明trunc_mat
是负责打印而不是打印什么的函数,包括哪些变量。
遗憾的是,dplyr:::print.tbl_df
不向trunc_mat
传递任何参数,trunc_mat
也不支持选择显示哪些变量(仅显示多少行)。一种解决方法是将 dplyr 的结果转换为 data.frame
并使用 head
:
res = movies %.%
group_by(year) %.%
summarise(Length = mean(length), Title = max(title),
Dramaz = sum(Drama), Actionz = sum(Action),
Action = sum(Action), Comedyz = sum(Comedy)) %.%
mutate(Year1 = year + 1)
head(data.frame(res))
year Length Title Dramaz Actionz Action Comedyz
1 1898 1.000000 Pack Train at Chilkoot Pass 1 0 0 2
2 1894 1.000000 Sioux Ghost Dance 0 0 0 0
3 1902 3.555556 Voyage dans la lune, Le 1 0 0 2
4 1893 1.000000 Blacksmith Scene 0 0 0 0
5 1912 24.382353 Unseen Enemy, An 22 0 0 4
6 1922 74.192308 Trapped by the Mormons 20 0 0 16
Year1
1 1899
2 1895
3 1903
4 1894
5 1913
6 1923
【讨论】:
始终欢迎拉取请求 :) 但print.tbl_df
可能确实需要 all_columns
参数。以上是关于覆盖 dplyr 中的“变量未显示”,以显示 df 中的所有列的主要内容,如果未能解决你的问题,请参考以下文章