Reshape table 使用列值作为列名?
Reshape table using column values as column names?
我正在尝试重塑 table。以下 table 是通过在 df:
上使用此代码创建的
df2 <- df %>%
group_by(Organization, Year) %>%
tally()
组织
年
N
X
1999
3
X
2010
3
是
2009
4
是
2010
5
是
2011
5
Z
2008
5
Z
2011
5
我要创建的内容:
组织
1999
2008
2009
2010
2011
X
3
0
0
3
0
是
0
0
4
5
5
Z
0
5
0
0
5
它只需要现有的年份,而不是在中间创建新的年份(比如 1999 年和 2008 年之间的间隔),它会根据需要填充 0。
我们需要 pivot_wider
在 arrange
通过 'Year' 处理行之后。对于 pivot_wider
,它使用相同的数据出现顺序
library(dplyr)
library(tidyr)
df %>%
arrange(Year) %>%
pivot_wider(names_from = Year, values_from = N, values_fill = 0)
-输出
# A tibble: 3 x 6
Organization `1999` `2008` `2009` `2010` `2011`
<chr> <int> <int> <int> <int> <int>
1 X 3 0 0 3 0
2 Z 0 5 0 0 5
3 Y 0 0 4 5 5
数据
df <- structure(list(Organization = c("X", "X", "Y", "Y", "Y", "Z",
"Z"), Year = c(1999L, 2010L, 2009L, 2010L, 2011L, 2008L, 2011L
), N = c(3L, 3L, 4L, 5L, 5L, 5L, 5L)), class = "data.frame", row.names = c(NA,
-7L))
您还可以在data.table
中使用函数dcast
,如下所示:
library(data.table)
dcast(as.data.table(df), Organization ~ Year, value.var="N", fill=0)
# Organization 1999 2008 2009 2010 2011
# 1: X 3 0 0 3 0
# 2: Y 0 0 4 5 5
# 3: Z 0 5 0 0 5
我正在尝试重塑 table。以下 table 是通过在 df:
上使用此代码创建的df2 <- df %>%
group_by(Organization, Year) %>%
tally()
组织 | 年 | N |
---|---|---|
X | 1999 | 3 |
X | 2010 | 3 |
是 | 2009 | 4 |
是 | 2010 | 5 |
是 | 2011 | 5 |
Z | 2008 | 5 |
Z | 2011 | 5 |
我要创建的内容:
组织 | 1999 | 2008 | 2009 | 2010 | 2011 |
---|---|---|---|---|---|
X | 3 | 0 | 0 | 3 | 0 |
是 | 0 | 0 | 4 | 5 | 5 |
Z | 0 | 5 | 0 | 0 | 5 |
它只需要现有的年份,而不是在中间创建新的年份(比如 1999 年和 2008 年之间的间隔),它会根据需要填充 0。
我们需要 pivot_wider
在 arrange
通过 'Year' 处理行之后。对于 pivot_wider
,它使用相同的数据出现顺序
library(dplyr)
library(tidyr)
df %>%
arrange(Year) %>%
pivot_wider(names_from = Year, values_from = N, values_fill = 0)
-输出
# A tibble: 3 x 6
Organization `1999` `2008` `2009` `2010` `2011`
<chr> <int> <int> <int> <int> <int>
1 X 3 0 0 3 0
2 Z 0 5 0 0 5
3 Y 0 0 4 5 5
数据
df <- structure(list(Organization = c("X", "X", "Y", "Y", "Y", "Z",
"Z"), Year = c(1999L, 2010L, 2009L, 2010L, 2011L, 2008L, 2011L
), N = c(3L, 3L, 4L, 5L, 5L, 5L, 5L)), class = "data.frame", row.names = c(NA,
-7L))
您还可以在data.table
中使用函数dcast
,如下所示:
library(data.table)
dcast(as.data.table(df), Organization ~ Year, value.var="N", fill=0)
# Organization 1999 2008 2009 2010 2011
# 1: X 3 0 0 3 0
# 2: Y 0 0 4 5 5
# 3: Z 0 5 0 0 5