Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/image/5.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从dataframe列创建dataframe的方法_R_Dataframe_Reshape - Fatal编程技术网

R从dataframe列创建dataframe的方法

R从dataframe列创建dataframe的方法,r,dataframe,reshape,R,Dataframe,Reshape,在R中寻找从另一个数据帧创建数据帧的方法,其中列a的值作为索引,列B中的每个唯一值成为新数据帧中的新列,列C的值作为新列中的值 数据帧1: 科拉 B列 C柱 A. 2011 1. B 2012 2. C 2013 3. D 2011 4. E 2012 5. D 2013 6. A. 2013 7. 下面是一个使用“重塑”的基本R选项 给 ColA ColC.2011 ColC.2012 ColC.2013 1 A 1 NA 7 2

在R中寻找从另一个数据帧创建数据帧的方法,其中列a的值作为索引,列B中的每个唯一值成为新数据帧中的新列,列C的值作为新列中的值

数据帧1:

科拉 B列 C柱 A. 2011 1. B 2012 2. C 2013 3. D 2011 4. E 2012 5. D 2013 6. A. 2013 7.
下面是一个使用“重塑”的基本R选项

  ColA ColC.2011 ColC.2012 ColC.2013
1    A         1        NA         7
2    B        NA         2        NA
3    C        NA        NA         3
4    D         4        NA         6
5    E        NA         5        NA
带有dcast的data.table选项

资料

这是一个整洁的解决方案

library(tidyverse)

df1 %>%
  pivot_wider(
    id_cols = Col.A,
    names_from = Col.B,
    values_from = Col.C,
    values_fill = 0L
  )
## A tibble: 5 x 4
#  Col.A `2011` `2012` `2013`
#  <chr>  <int>  <int>  <int>
#1 A          1      0      7
#2 B          0      2      0
#3 C          0      0      3
#4 D          4      0      6
#5 E          0      5      0
资料

我们可以使用R基地的XTAB

数据
> dcast(setDT(df),ColA~ColB, value.var = "ColC")
   ColA 2011 2012 2013
1:    A    1   NA    7
2:    B   NA    2   NA
3:    C   NA   NA    3
4:    D    4   NA    6
5:    E   NA    5   NA
> dput(df)
structure(list(ColA = c("A", "B", "C", "D", "E", "D", "A"), ColB = c(2011L, 
2012L, 2013L, 2011L, 2012L, 2013L, 2013L), ColC = 1:7), class = "data.frame", row.names = c(NA, 
-7L))
library(tidyverse)

df1 %>%
  pivot_wider(
    id_cols = Col.A,
    names_from = Col.B,
    values_from = Col.C,
    values_fill = 0L
  )
## A tibble: 5 x 4
#  Col.A `2011` `2012` `2013`
#  <chr>  <int>  <int>  <int>
#1 A          1      0      7
#2 B          0      2      0
#3 C          0      0      3
#4 D          4      0      6
#5 E          0      5      0
df1 <-
structure(list(Col.A = c("A", "B", "C", "D", "E", "D", "A"), 
Col.B = c(2011L, 2012L, 2013L, 2011L, 2012L, 2013L, 2013L), 
Col.C = 1:7), row.names = c(NA, -7L), class = "data.frame")
xtabs(Col.C ~ Col.A + Col.B, df1)
df1 <- structure(list(Col.A = c("A", "B", "C", "D", "E", "D", "A"), 
    Col.B = c(2011L, 2012L, 2013L, 2011L, 2012L, 2013L, 2013L
    ), Col.C = 1:7), row.names = c(NA, -7L), class = "data.frame")