Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/74.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 使用colname的长格式_R_Tidyr_Melt - Fatal编程技术网

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中的值,这是完美的。非常感谢。你太棒了@卡米尔