R 使用colname的长格式
假设我有以下数据R 使用colname的长格式,r,tidyr,melt,R,Tidyr,Melt,假设我有以下数据 A <- c(4,4,4,4,4) B <- c(1,2,3,4,4) C <- c(1,2,4,4,4) D <- c(3,2,4,1,4) E <- c(4,4,4,4,5) data <- data.frame(A,B,C,D,E) data<- t(data) colnames(data) = c("num1","freq1","freq2","freq3","totfreq") > data num1
A <- c(4,4,4,4,4)
B <- c(1,2,3,4,4)
C <- c(1,2,4,4,4)
D <- c(3,2,4,1,4)
E <- c(4,4,4,4,5)
data <- data.frame(A,B,C,D,E)
data<- t(data)
colnames(data) = c("num1","freq1","freq2","freq3","totfreq")
> data
num1 freq1 freq2 freq3 totfreq
A 4 4 4 4 4
B 1 2 3 4 4
C 1 2 4 4 4
D 3 2 4 1 4
E 4 4 4 4 5
A首先,您有一个矩阵,但可能需要一个数据帧。将其设置为TIBLE将删除存储字母的行名称,因此
as.data.frame(data) %>% rownames_to_column("id")
将获得一个数据框,其中包含一列字母id
您希望通过收集所有freq
列将此数据转换为长格式。然后我添加了一个列,给出了观察的类型;这是不必要的,但因为您说您希望轻松筛选两种类型中的一种,即组freq1
等,或totfreq
——这是我经常使用的一种方便的设置
库(tidyverse)
_组的4d3频率1 2
#>5 E 4频率1 4由_集团提供
#>6 A 4频率2 4由_集团提供
使用type
列,可以很容易地按类型进行打印过滤。这将允许您将过滤后的数据帧导入类似于ggplot
的内容中,或者提供一列用于刻面或映射到美学上
分组条形图的#
数据长%>%筛选器(类型==“按组”)
#>id num1变量值类型
#>1 A 4频率1 4由_集团提供
#>2 B 1频率1 2按_组
#>3 C 1频率1 2按_组
#>4 D 3频率1 2由_组
#>5 E 4频率1 4由_集团提供
#>6 A 4频率2 4由_集团提供
#>7 B 1频率2 3由_集团提供
#>8 C 1频率2 4由_集团提供
#>9 D 3频率2 4由_组
#>10 E 4频率2 4由_集团提供
#>11 A 4频率3 4由_集团提供
#>12 B 1频率3 4由_集团提供
#>13 C 1频率3 4由_集团提供
#>14 D 3频率3 1由_集团提供
#>15 E 4频率3 4由_集团提供
#总频率
数据长%>%筛选器(类型=“总计”)
#>id num1变量值类型
#>1 A 4 totfreq 4总计
#>2 B 1 totfreq 4总计
#>3 C 1 totfreq 4总计
#>4 D 3总频率4总计
#>5 E 4 totfreq 5总计
由(v0.2.0)于2018年5月17日创建。首先,您必须格式化数据以便进行处理,然后让ggplot2发挥作用
找到下面的代码和输出图:
library(dplyr) #To use mutate
library(ggplot2)
library(reshape2) #To use melt
library(plotly)
A <- c(4,4,4,4,4)
B <- c(1,2,3,4,4)
C <- c(1,2,4,4,4)
D <- c(3,2,4,1,4)
E <- c(4,4,4,4,5)
data <- data.frame(A,B,C,D,E)
data2=names(data)
data<- t(data)
colnames(data) = c("num1","freq1","freq2","freq3","totfreq")
data=data.frame(data)
#Because mutate only works for data.frame not matrix
data=mutate(data,names=data2)%>%select("freq1","freq2","freq3","freq3","totfreq","names")
# Adding names and removing num1
meltdata=melt(data,id.vars="names")
#Because we need melted data to perform
#Graph 1 (colourless and boring)
Graph1=ggplot(meltdata,aes(x=names,y=value))+geom_col()+facet_wrap(~variable)
#Graph 2 (Cool one)
Graph2=ggplot(meltdata,aes(x=names,y=value,fill=variable))+geom_col()+geom_text(label=meltdata$value,position="stack")
#Graph 3 is the best I guess
meltdata=mutate(meltdata,xval=1)
Graph3=ggplot(meltdata,aes(x=xval,y=value,fill=variable))+geom_col()+geom_text(label=meltdata$value,position = position_stack(vjust = 0.5))+
facet_grid(~names)+theme(panel.background = element_blank(),axis.text.x = element_blank(),
axis.ticks.x = element_blank())
Graph3
#If you like plotly so much then just use it by passing ggplot variable, But ggplot is better if you ask me
ggplotly(Graph1)
ggplotly(Graph2)
ggplotly(Graph3)
library(dplyr)#使用mutate
图书馆(GG2)
库(重塑2)#使用熔化
图书馆(绘本)
所以你想让这些条的高度等于freq1,freq2,freq3和totfreq的和?“然后是带值的最后一列”,您指的是哪些值?而且,这似乎是一个关于如何在准备过程中重塑数据的问题,而不是关于如何绘制数据的问题。我建议删除ggplot2
和plotly
标记,因为回答这个问题都不需要它们。一旦数据成形,他们就会考虑到一个可能的后续问题,即构建绘图。条形图的高度应为freq变量列中的每个值。所以A会有3个条来表示freq1,freq2,freq3中的值。但是我需要设置它,这样我可以选择抓取totfreq,在另一个图中,我可以绘制一个只有1条的图,对于totfreq中的值,这是完美的。非常感谢。你太棒了@卡米尔