Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/82.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 tibble shaping可将因子分散到多个变量中,以将行分解出来_R_Normalization_Reshape_Forecasting_Tidyverse - Fatal编程技术网

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

注意,这与问题“”在两个方面不同:

  • 需要由多个目标列限定 单因素列
  • 这个问题的标题指定了“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
    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”如果其中任何一个与“数字”不匹配。