R tibble shaping可将因子分散到多个变量中,以将行分解出来
注意,这与问题“”在两个方面不同:R tibble shaping可将因子分散到多个变量中,以将行分解出来,r,normalization,reshape,forecasting,tidyverse,R,Normalization,Reshape,Forecasting,Tidyverse,注意,这与问题“”在两个方面不同: 需要由多个目标列限定 单因素列 这个问题的标题指定了“tibble”,意思是tidyverse 首选解决方案 执行: set.seed(14) df <- data.frame(geo = LETTERS[1:2], time = c(2000,2000,2001,2001), X = rnorm(4, 0, 1), Y = rnorm(4, 0, 2)) head(df
tidyverse
首选解决方案set.seed(14)
df <- data.frame(geo = LETTERS[1:2], time = c(2000,2000,2001,2001),
X = rnorm(4, 0, 1),
Y = rnorm(4, 0, 2))
head(df)
我想做的是重新整形为排列时间
,最后得到两行,分别为geo
:A
和B
这将产生如下结果:
geo time X Y
1 A 2000 -0.6618498 -0.07228116
2 B 2000 1.7189542 2.46389035
3 A 2001 2.1216670 -0.12976154
4 B 2001 1.4971537 2.13798746
geo X.2000 Y.2000 X.2001 Y.2001
A -0.6618498 -0.07228116 2.1216670 -0.12976154
B 1.7189542 2.46389035 1.4971537 2.13798746
我们可以使用重塑函数
reshape(df, direction = "wide", idvar = "geo", timevar = "time")
它给了我们你想要的结果
geo X.2000 Y.2000 X.2001 Y.2001
1 A -0.6618498 -0.07228116 2.121667 -0.1297615
2 B 1.7189542 2.46389035 1.497154 2.1379875
我们可以使用重塑函数
reshape(df, direction = "wide", idvar = "geo", timevar = "time")
它给了我们你想要的结果
geo X.2000 Y.2000 X.2001 Y.2001
1 A -0.6618498 -0.07228116 2.121667 -0.1297615
2 B 1.7189542 2.46389035 1.497154 2.1379875
具体做法是:
library(tidyr)
library(dplyr)
df %>%
gather(key, value, -c(geo, time)) %>%
unite(key, c(key, time), sep = ".") %>%
spread(key, value)
# geo X.2000 X.2001 Y.2000 Y.2001
# 1 A -0.6618498 2.121667 -0.07228116 -0.1297615
# 2 B 1.7189542 1.497154 2.46389035 2.1379875
具体做法是:
library(tidyr)
library(dplyr)
df %>%
gather(key, value, -c(geo, time)) %>%
unite(key, c(key, time), sep = ".") %>%
spread(key, value)
# geo X.2000 X.2001 Y.2000 Y.2001
# 1 A -0.6618498 2.121667 -0.07228116 -0.1297615
# 2 B 1.7189542 1.497154 2.46389035 2.1379875
在基本R中,重塑(df,direction=“wide”,idvar=“geo”,timevar=“time”)
。使用tidyverse
,您必须收集
,联合
,然后分散
<代码>dcast
来自数据表上的“data.table”。表
也可以这样做,而无需先融化数据。可能的重复不值得回答,但为了完整性,数据.table::dcast(as.data.table(df),geo~time,value.var=c(“X”,“Y”)
。在基数R中,重塑(df,direction=“wide”,idvar=“geo”,timevar=“time”)
。使用tidyverse
,您必须收集
,联合
,然后分散
<代码>dcast
来自数据上的“data.table”
表
也可以做到这一点,而无需先融化数据。可能的重复不值得回答,但为了完整性,data.table::dcast(as.data.table(df),geo~time,value.var=c(“X”,“Y”)
。正如我在问题标题中指定的“tibble”,tidyverse
是首选。不幸的是,此解决方案将所有排列列类更改为“character”,如果其中任何一个与“numeric”不匹配。正如我在问题标题中指定的“tibble”,首选tidyverse
。不幸的是,此解决方案将所有排列列类更改为“character”如果其中任何一个与“数字”不匹配。