标签: reshape2

比较聚集(tidyr)融化(reshape2)

我喜欢reshape2套餐,因为它让生活如此轻松.通常,Hadley在之前的软件包中进行了改进,从而实现了简化,运行速度更快的代码.我想我给tidyr一抡,并从我读我认为gather是非常相似meltreshape2.但在阅读完文档后,我无法gather完成相同的任务melt.

数据视图

这是一个数据视图(dput帖子末尾的实际数据):

  teacher yr1.baseline     pd yr1.lesson1 yr1.lesson2 yr2.lesson1 yr2.lesson2 yr2.lesson3
1       3      1/13/09 2/5/09      3/6/09     4/27/09     10/7/09    11/18/09      3/4/10
2       7      1/15/09 2/5/09      3/3/09      5/5/09    10/16/09    11/18/09      3/4/10
3       8      1/27/09 2/5/09      3/3/09     4/27/09     10/7/09    11/18/09      3/5/10
Run Code Online (Sandbox Code Playgroud)

这是melt时尚的代码,我的尝试gather.我gather怎么能做同样的事情melt

library(reshape2); library(dplyr); library(tidyr)

dat %>% 
   melt(id=c("teacher", "pd"), value.name="date") 

dat %>% 
   gather(key=c(teacher, pd), value=date, -c(teacher, pd)) 
Run Code Online (Sandbox Code Playgroud)

期望的输出 …

r reshape2 tidyr

64
推荐指数
2
解决办法
2万
查看次数

是否有可能在tidyr中的多个列上使用扩展类似于dcast?

我有以下虚拟数据:

library(dplyr)
library(tidyr)
library(reshape2)
dt <- expand.grid(Year = 1990:2014, Product=LETTERS[1:8], Country = paste0(LETTERS, "I")) %>%   select(Product, Country, Year)
dt$value <- rnorm(nrow(dt))
Run Code Online (Sandbox Code Playgroud)

我选择了两个产品国家组合

sdt <- dt %>% filter((Product == "A" & Country == "AI") | (Product == "B" & Country =="EI"))
Run Code Online (Sandbox Code Playgroud)

我希望每个组合并排看到这些值.我可以这样做dcast:

sdt %>% dcast(Year ~ Product + Country)
Run Code Online (Sandbox Code Playgroud)

是否有可能spread从包tidyr做到这一点

r reshape2 tidyr

61
推荐指数
2
解决办法
3万
查看次数

reshape2融化警告信息

我正在使用melt并遇到以下警告消息:
attributes are not identical across measure variables; they will be dropped

环顾四周后人们提到它是因为变量是不同的类; 但是,我的数据集不是这种情况.

这是数据集:

test <- structure(list(park = structure(c(1L, 1L, 1L, 1L, 1L, 1L, 1L, 
1L, 1L, 1L), .Label = c("miss", "piro", "sacn", "slbe"), class = "factor"), 
    a1.one = structure(c(3L, 1L, 3L, 3L, 3L, 3L, 1L, 3L, 3L, 
    3L), .Label = c("agriculture", "beaver", "development", "flooding", 
    "forest_pathogen", "harvest_00_20", "harvest_30_60", "harvest_70_90", 
    "none"), class = "factor"), a2.one = structure(c(6L, 6L, 
    6L, 6L, 6L, 6L, 6L, 6L, 6L, 6L), .Label = …
Run Code Online (Sandbox Code Playgroud)

r melt reshape2

52
推荐指数
1
解决办法
4万
查看次数

在R中重塑与reshape2

我试图理解为什么开发已经转变reshapereshape2包装.它们似乎在功能上是相同的,但是,reshape2由于服务器上运行的旧版本的R ,我无法升级到当前.我担心一个主要错误的可能性会将开发转移到一个全新的包而不是简单地继续开发reshape.有谁知道reshape包装中是否存在重大缺陷?

r reshape reshape2

48
推荐指数
1
解决办法
2万
查看次数

ggplot中的分组条形图

我有一个调查文件,其中行是观察和列问题.

以下是一些假数据:

People,Food,Music,People
P1,Very Bad,Bad,Good
P2,Good,Good,Very Bad
P3,Good,Bad,Good
P4,Good,Very Bad,Very Good
P5,Bad,Good,Very Good
P6,Bad,Good,Very Good
Run Code Online (Sandbox Code Playgroud)

我的目标是创造这种情节ggplot2.

  • 我绝对不关心颜色,设计等.
  • 该图与假数据不对应

在此输入图像描述

这是我的假数据:

raw <- read.csv("http://pastebin.com/raw.php?i=L8cEKcxS",sep=",")
raw[,2]<-factor(raw[,2],levels=c("Very Bad","Bad","Good","Very Good"),ordered=FALSE)
raw[,3]<-factor(raw[,3],levels=c("Very Bad","Bad","Good","Very Good"),ordered=FALSE)
raw[,4]<-factor(raw[,4],levels=c("Very Bad","Bad","Good","Very Good"),ordered=FALSE)
Run Code Online (Sandbox Code Playgroud)

但是,如果我选择Y作为计数,那么我将面临一个关于选择X和Group值的问题......我不知道我是否能够成功而不使用reshape2...我也厌倦了使用具有融化功能的重塑.但我不明白如何使用它...

r bar-chart ggplot2 reshape reshape2

45
推荐指数
1
解决办法
15万
查看次数

将多组测量列(宽格式)整形为单列(长格式)

我有一个宽格式的数据帧,在不同的日期范围内重复测量.在我的例子中,有三个不同的时期,都有相应的值.例如,第一测量(Value1)是在测量期间从DateRange1StartDateRange1End:

ID DateRange1Start DateRange1End Value1 DateRange2Start DateRange2End Value2 DateRange3Start DateRange3End Value3
1 1/1/90 3/1/90 4.4 4/5/91 6/7/91 6.2 5/5/95 6/6/96 3.3 
Run Code Online (Sandbox Code Playgroud)

我希望将数据重新整形为长格式,以便将DateRangeXStart和DateRangeXEnd列分组.因此,原始表中的1行在新表中变为3行:

ID DateRangeStart DateRangeEnd Value
1 1/1/90 3/1/90 4.4
1 4/5/91 6/7/91 6.2
1 5/5/95 6/6/96 3.3
Run Code Online (Sandbox Code Playgroud)

我知道必须有一种方法可以用reshape2/ melt/ recast/ 来做到这一点tidyr,但我似乎无法弄清楚如何以这种特殊方式将多组度量变量映射到单个值列集.

r reshape r-faq reshape2 tidyr

36
推荐指数
5
解决办法
1万
查看次数

R:来自multiline ggplot2命令的"一元运算符错误"

我正在使用ggplot2对两种不同物种进行箱线图比较,如下面的第三列所示:

> library(reshape2)
> library(ggplot2)
> melt.data = melt(actb.raw.data)

> head(actb.raw.data)
  region  expression species
1     CG -0.17686667   human
2     CG -0.06506667   human
3     DG  1.04590000   human
4    CA1  1.94093333   human
5    CA2  1.55023333   human
6    CA3  1.75800000   human

> head(melt.data)
  region species   variable       value
1     CG   human expression -0.17686667
2     CG   human expression -0.06506667
3     DG   human expression  1.04590000
4    CA1   human expression  1.94093333
5    CA2   human expression  1.55023333
6    CA3   human expression  1.75800000
Run Code Online (Sandbox Code Playgroud)

但是,当我运行以下代码时:

ggplot(combined.data, aes(x = region, y …
Run Code Online (Sandbox Code Playgroud)

r multiline ggplot2 reshape2

35
推荐指数
2
解决办法
11万
查看次数

在reshape2中使用min或max时,没有非缺失参数警告

当我在reshape2包中的dcast函数中使用min或max时,我收到以下警告.它告诉我什么?我找不到任何解释警告信息的东西,我有点困惑,为什么我在使用max时得到它而不是当我使用mean或其他聚合函数时.

警告消息:
在.fun(.value [0],...)中:min没有非缺失参数; 返回Inf

这是一个可重复的例子:

data(iris)

library(reshape2)

molten.iris <- melt(iris,id.var="Species")
summary(molten.iris)
str(molten.iris)
#------------------------------------------------------------
# Both return warning:
dcast(data=molten.iris,Species~variable,value.var="value",fun.aggregate=min)
dcast(data=molten.iris,Species~variable,value.var="value",fun.aggregate=max)

# Length looks fine though
dcast(data=molten.iris,Species~variable,value.var="value",fun.aggregate=length)

#------------------------------------------------------------
# No warning messages here:
aggregate(value ~ Species + variable, FUN=min, data=molten.iris)
aggregate(value ~ Species + variable, FUN=max, data=molten.iris)
#------------------------------------------------------------
# Or here:
library(plyr)

ddply(molten.iris,c("Species","variable"),function(df){
  data.frame(
    "min"=min(df$value),
    "max"=max(df$value)
    )
})
#------------------------------------------------------------
Run Code Online (Sandbox Code Playgroud)

r aggregate-functions reshape2

33
推荐指数
1
解决办法
6万
查看次数

dcast中的value.var可以是列表还是具有多个值变量?

在帮助文件中dcast.data.table,有一条说明已实现新功能的说明:"dcast.data.table允许value.var列为类型列表"

我认为这意味着一个列表中可以有多个值变量,即采用以下格式:

dcast.data.table(dt, x1~x2, value.var=list('var1','var2','var3'))
Run Code Online (Sandbox Code Playgroud)

但是我们得到一个错误: 'value.var' must be a character vector of length 1.

是否有这样的功能,如果没有,那么其他单线替代品会是什么?

编辑:回复以下评论

在某些情况下,您需要将多个变量视为value.var.想象一下,例如x2由3个不同的周组成,你有2个值变量,如盐和糖的消耗,你想在不同的周内投射这些变量.当然,你可以将2个值变量"融化"成一个列,但为什么要使用两个函数做什么,当你可以在一个函数中这样reshape做时呢?

(注意:我也注意到reshape不能将多个变量视为时间变量dcast.)

所以我的观点是,我不明白为什么这些函数不允许灵活地在其中包含多个变量,value.var或者time.var就像我们允许的多个变量一样id.var.

r reshape reshape2 data.table

31
推荐指数
3
解决办法
3万
查看次数

使用多个值列重新定义宽到长

我需要将我的宽表重新整形为长格式,但为每条记录保留多个字段,例如:

dw <- read.table(header=T, text='
 sbj f1.avg f1.sd f2.avg f2.sd  blabla
   A   10    6     50     10      bA
   B   12    5     70     11      bB
   C   20    7     20     8       bC
   D   22    8     22     9       bD
 ')

# Now I want to melt this table, keeping both AVG and SD as separate fields for each measurement, to get something like this:

 #    sbj var avg  sd  blabla
 #     A   f1  10  6     bA
 #     A   f2  50  10    bA
 #     B …
Run Code Online (Sandbox Code Playgroud)

r reshape melt reshape2

27
推荐指数
5
解决办法
3万
查看次数