R从dataframe列创建dataframe的方法
在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从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选项 给
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")