library(dplyr) #Devel version, soon-to-be-released 0.6.0
library(tidyr)
library(ggplot2)
library(forcats) #for gss_cat data
Run Code Online (Sandbox Code Playgroud)
我正在尝试编写一个函数,它结合了即将发布的dplyrdevel版本的quosures tidyr::gather和ggplot2.到目前为止它似乎可以使用tidyr,但我在绘图方面遇到了麻烦.
以下功能似乎适用于tidyr's gather:
GatherFun<-function(gath){
gath<-enquo(gath)
gss_cat%>%select(relig,marital,race,partyid)%>%
gather(key,value,-!!gath)%>%
count(!!gath,key,value)%>%
mutate(perc=n/sum(n))
}
Run Code Online (Sandbox Code Playgroud)
但我无法弄清楚如何让情节发挥作用.我试着用!!gath用ggplot2,但没有奏效.
GatherFun<-function(gath){
gath<-enquo(gath)
gss_cat%>%select(relig,marital,race,partyid)%>%
gather(key,value,-!!gath)%>%
count(!!gath,key,value)%>%
mutate(perc=n/sum(n))%>%
ggplot(aes(x=value,y=perc,fill=!!gath))+
geom_col()+
facet_wrap(~key, scales = "free") +
geom_text(aes(x = "value", y = "perc",
label = "perc", group = !!gath),
position = position_stack(vjust = .05))
}
Run Code Online (Sandbox Code Playgroud) 我正在努力解决如何手动更改条形颜色的问题ggplot2.奇怪的是,我可以得到它的使用需要使用一个传说更复杂的格式,当工作scale_fill_manual和设置values,labels等,但创造一个不需要一个传说简单的图表时,我似乎无法得到它的工作.下面是一个示例数据框架,我用来dplyr获取百分比的步骤,以及我认为它应该如何工作的步骤ggplot2.我只想手动将条形颜色更改为红色,seagreen3和灰色.
任何帮助,将不胜感激.我也很想知道用于快速计算百分比的不同方法.我一直在使用滚边dplyr,但如果能看到编写代码的其他方法会很棒.
library(dplyr)
library(ggplot2)
Service <- c("Satisfied", "Dissatisfied", "Neutral", "Satisfied", "Neutral")
Service2 <- c("Dissatisfied", "Dissatisfied", "Neutral", "Satisfied", "Satisfied")
Services <- data.frame(Service, Service2)
ServicesProp <- Services %>%
select(Service) %>% group_by(Service) %>%
summarise(count=n()) %>%
mutate(percent = count / sum(count))
ggplot(ServicesProp, aes(x = Service, y = percent)) +
geom_bar(stat = "identity", position = "dodge") +
scale_fill_manual(values = c("red", "seagreen3", "grey"))
Run Code Online (Sandbox Code Playgroud) 我在ggplot2中有一个关于facet_wrap标签的快速问题.下面是一个简单的数据框架.其中一个变量(facet变量)非常长.我想找到一种简单的方法来适应每个facet标签中的所有文本.我确定必须有某种包装文本功能或多行选项?我希望一个方法不太复杂或者如果可能的话也不需要任何其他包.我对R仍然相对较新,希望在ggplot2中有一个简短而优雅的答案.
Q1<-c("Dissatisfied","Satisfied","Satisfied","Satisfied","Dissatisfied","Dissatisfied","Satisfied","Satisfied")
Q2<-c("Dissatisfied","Dissatisfied","Satisfied","Dissatisfied","Dissatisfied","Satisfied","Satisfied","Satisfied")
Year<-c("This is a very long variable name This is a very","This is another really long veriable name a really long","THis is a shorter name","Short name","This is also a long variable name again","Short name","Short name","Another kind of long variable name")
Example<-data.frame(Service,Year,Q1,Q2)
ExampleM<-melt(Example,id.vars=c("Service","Year"))
ggplot(ExampleM, aes(x=variable, fill=value)) +
geom_bar(position="dodge")+
facet_grid(~Year)
Run Code Online (Sandbox Code Playgroud) 使用示例数据(底部),我想使用下面的代码对数据进行分组和汇总。在此之后,我想转置,但我被困在如何使用 tidyr 来实现这一点?
对于上下文,我试图重新创建一个使用 knitr::kable 在 Excel 中创建的现有表,因此我的以下代码的最终产品预计会破坏整洁原则。
例如:
library(tidyverse)
Df <- Df %>% group_by(Code1, Code2, Level) %>%
summarise_all(funs(count = sum(!is.na(.))))
Run Code Online (Sandbox Code Playgroud)
我可以使用管道添加 t(.) ...
Df <- Df %>% group_by(Code1, Code2, Level) %>%
summarise_all(funs(count = sum(!is.na(.)))) %>%
t(.)
Run Code Online (Sandbox Code Playgroud)
或者我可以添加...
Df <- as.data.frame(t(Df)
Run Code Online (Sandbox Code Playgroud)
这两个选项都允许我转置,但我想知道是否有使用 tidyrgather和spread函数实现这一目标的 tidyverse 方法?我想对这个过程有更多的控制,还想删除“V1”、“V2”等,它们在使用转置 ( t)时显示为列名。
如何使用 tidyverse 实现这一目标?
示例代码:
Code1 <- c("H200","H350","H250","T400","T240","T600")
Code2 <- c("4A","4A","4A","2B","2B","2B")
Level <- c(1,2,3,1,2,3)
Q1 <- c(30,40,40,50,60,80)
Q2 <- c(50,30,50,40,80,30)
Q3 <- c(30,45,70,42,81,34)
Df <- data.frame(Code1, Code2, Level, Q1, …Run Code Online (Sandbox Code Playgroud) 当我试图在我的工作笔记本电脑上安装软件包时,我收到了一个错误.我被告知我拥有笔记本电脑的完全权限,所以应该没有块.
我认为它可能与安装包所在的库的文件路径有关?我正在使用最新版本的R和R Studio,64位,并使用加拿大的U of T CRAN镜像站点.
以下是我尝试安装plyr时出现的内容
install.packages("plyr")
Run Code Online (Sandbox Code Playgroud)
还安装了只有源代码形式的依赖'Rcpp'包,可能需要编译C/C++/Fortran:'Rcpp''plyr'
当我尝试安装时ggplot2,这是一个很长的错误消息:
错误:依赖'stringi'不适用于包'stringr'*删除'C:/RPackages/R-3.2.3/library/stringr'在install.packages中警告:运行命令'"C:/ RPACKA~1/R -32~1.3/bin/x64/R"CMD INSTALL -l"C:\ RPackages\R-3.2.3\library"C:\ Users\MICHAE~1.COL\AppData\Local\Temp\RtmpGs24zA/downloaded_packages/stringr_1.0.0.tar.gz'在install.packages中有状态1警告:软件包'stringr'的安装具有非零退出状态错误:依赖'colorspace'不适用于软件包'munsell'*删除'C:/ RPackages /R-3.2.3/library/munsell'在install.packages中警告:运行命令'"C:/RPACKA〜1/R-32〜1.3/bin/x64/R"CMD INSTALL -l"C:\ RPackages\R-3.2.3\library"C:\ Users\MICHAE~1.COL\AppData\Local\Temp\RtmpGs24zA/downloaded_packages/munsell_0.4.3.tar.gz"在install.packages中有状态1警告:安装包' munsell'具有非零退出状态错误:依赖'摘要','plyr','reshape2','scale'不适用于包'ggplot2'*删除'C:/ RPack age/R-3.2.3/library/ggplot2'inight.packages中的警告:运行命令'"C:/RPACKA〜1/R-32〜1.3/bin/x64/R"CMD INSTALL -l"C:\ RPackages\R-3.2.3\library"C:\ Users\MICHAE~1.COL\AppData\Local\Temp\RtmpGs24zA/downloaded_packages/ggplot2_2.0.0.tar.gz"在install.packages中有状态1警告:安装包'ggplot2'具有非零退出状态下载的源包位于'C:\ Users\michael.colangelo\AppData\Local\Temp\RtmpGs24zA\downloaded_packages'中
"非零退出状态"是什么意思?是否正在尝试为安装找到一个库?>代码中提到的appData文件似乎不存在或者我无法访问它.如何将其更改为另一个本地文件夹?
我有一个关于使用dplyr和reshape2计算多列卡方统计量的问题。下面是一个小数据框...
Sat <- c("Satisfied","Satisfied","Dissatisfied","Dissatisfied",
"Neutral")
Gender <- c("Male","Male","Female","Male","Female")
Ethnicity <- c("Asian","White","White","Asian","White")
AgeGroup <- c("18-20","18-20","21-23","18-20","18-28")
Example <- data.frame(Sat,Gender,Ethnicity,AgeGroup)
Run Code Online (Sandbox Code Playgroud)
我将如何使用summarise_each或melt计算Sat针对每个其他变量的列以生成卡方残差和 p 值统计数据。我想一定有类似的东西:
Example %>% summarise_each(funs(chisq.test(...
Run Code Online (Sandbox Code Playgroud)
但我不知道如何完成它。另外,我将如何融化数据框并使用group_by或do()获取卡方统计数据?我有兴趣看到这两种方法。如果有一种方法可以合并broom包,那也很棒,或者tidyr代替reshape2.
所以回顾一下,我想运行卡方检验,例如
chisq.test(Example$Sat, Example$Gender)
Run Code Online (Sandbox Code Playgroud)
但是......我想产生卡方统计为Sat对变量Gender,Ethnicity和AgeGroup。这是一个小例子,我希望上面的方法能让我以快速有效的方式创建跨多列的卡方统计数据。如果我可以用 绘制热图中的残差ggplot2,这就是我有兴趣将broom包合并到这个示例中的原因。
显然,dplyr的汇总功能不包括"模式"选项.基于下面的简单数据框示例,我想确定每个"类别"组的模式或最常重复的数字.因此对于组"A",模式是22,对于"B",它是12和14,并且没有"C"的重复数字.
我在网上找到了一些函数的例子,但没有一个在组中没有重复数字的情况下解决了这个问题.是否需要自定义功能,或者某处是否有模式选项?我不想仅依赖于其模式功能的任何其他专用包.使用基础R,dplyr,整洁等组合找到优雅而简单的解决方案会很不错.
如果使用自定义函数,则在没有重复数字时,以及当存在多个同等重复数字时,它必须工作.
任何帮助将不胜感激!这似乎应该是R中的一个简单的解决方案,所以我很惊讶地发现没有简单的summarise_each(funs(mode)...选项.
如果使用自定义功能,请通过解释将其分解.我对R函数还是比较新的.
Category<-c("A","B","B","C","A","A","A","B","C","B","C","C")
Number<-c(22,12,12,8,22,22,18,14,10,14,1,3)
DF<-data.frame(Category,Number)
Run Code Online (Sandbox Code Playgroud) library(tidyverse)
Run Code Online (Sandbox Code Playgroud)
我坚持做一些应该这么简单的事情!使用下面的代码,我想要做的就是对三个"Var"列进行分组和汇总.我想要数和总和(这样我就可以创建三个百分比的列,如果你可以在你的答案中包含一个简单的方法来实现这一点,那么奖励).但是,我不想包括NA.使用"na.rm = TRUE"可以很容易地从sum中删除NA,但我似乎无法弄清楚如何在使用dplyr :: summarise_at时不在计数中包含NA(使用n()).
我错过了一些非常简单的事吗?
Df%>%group_by(Group)%>%summarise_at(vars(Var1:Var3),funs(n(),sum((.),na.rm=TRUE)))
Group<-c("House","Condo","House","House","House","House","House","Condo")
Var1<-c(0,1,1,NA,1,1,1,0)
Var2<-c(1,1,1,1,0,1,1,1)
Var3<-c(1,1,1,NA,NA,1,1,0)
Df<-data.frame(Group,Var1,Var2,Var3)
Run Code Online (Sandbox Code Playgroud) 下面是一些简单示例数据框和绘图的代码。我想知道如何有条件地为条形着色。我熟悉scale_fill_manual手动为条形着色,但是如果我想"Satisfied"在2016构面中使用不同的颜色,如果它的百分比"Satisfied"低于2015. 也许是红色警告边框或不同的颜色,例如橙色(仅作为示例)。
这不是最好的例子,但如果我有一个逐年最高框分数的图,那么当条形下降到一定百分比以下时,这对于让条形改变颜色会很有用。我尝试使用"colour = ifelse(Perc < 60, "orange", "green"组合,但无法使其发挥作用。我不确定如何构造该ifelse语句或将其放置在 ggplot 代码中的位置。
Year<-c(2015, 2015, 2015, 2015, 2015, 2016, 2016, 2016, 2016, 2016)
Service<-c("Satisfied", "Satisfied", "Satisfied", "Dissatisfied", "Dissatisfied",
"Satisfied", "Satisfied", "Dissatisfied", "Dissatisfied", "Dissatisfied")
df <- data.frame(Year, Service)
library(dplyr)
df.prop <- df %>%
count(Year, Service) %>%
mutate(Perc = prop.table(n))
library(ggplot2)
ggplot(df.prop, aes(x = Service, y = Perc, fill = Service)) +
geom_bar(stat = "identity", position = "dodge") +
geom_text(aes(label …Run Code Online (Sandbox Code Playgroud) 我不熟悉 ggplot2 中的直方图,觉得我错过了一些明显的东西。使用下面的数据,我正在尝试创建一个简单的直方图。我想要做的就是将 x 轴计数为 5,所以 0-5-10-15-20-25-30...等...100。所以垃圾箱会将年龄组除以 5。我想也许我必须设置界限或其他什么?我不确定为什么下面的示例创建的条形比其他条形更宽,以及为什么这些条形在 x 轴上没有正确排列。
我试图找到以前被问过的类似问题,但我仍然很困惑,尤其是在“break =”和“binwidth”以及边界等之间。
我更喜欢使用 ggplot 2.0 的答案。
Age<-c(18,82,65,89,10,44,46,23,10,15,22,33,34,30,50,60)
Sex<-c("M","F","F","M","F","M","F","M","F","M","F","M","F","F","F","M")
Df<-data.frame(Sex,Age)
ggplot(Df,aes(Age))+geom_histogram(breaks=seq(0,100,by=10),aes (fill=..count..))
Run Code Online (Sandbox Code Playgroud)