tibble shaping 将一个因子分布到多个变量中以分解出行
tibble shaping to spread a factor across multiple variables to factor out rows
请注意,这与问题“How to reshape data from long to wide format?”有两个不同之处:
- 有多个目标列需要被限定
单一因素列。
- 此问题的标题指定 "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)
产生如下内容:
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
我想要做的是重塑为 spread
time
,最后得到两行 geo
的值:A
和 B
。
这会产生如下内容:
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
函数
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
请注意,这与问题“How to reshape data from long to wide format?”有两个不同之处:
- 有多个目标列需要被限定 单一因素列。
- 此问题的标题指定 "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)
产生如下内容:
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
我想要做的是重塑为 spread
time
,最后得到两行 geo
的值:A
和 B
。
这会产生如下内容:
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
函数
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