tibble shaping 将一个因子分布到多个变量中以分解出行

tibble shaping to spread a factor across multiple variables to factor out rows

请注意,这与问题“How to reshape data from long to wide format?”有两个不同之处:

  1. 有多个目标列需要被限定 单一因素列。
  2. 此问题的标题指定 "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 的值:AB

这会产生如下内容:

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