将多行数据合并成一列
Combine data in many row into a columnn
我有这样的数据:
year Male
1 2011 8
2 2011 1
3 2011 4
4 2012 3
5 2012 12
6 2012 9
7 2013 4
8 2013 3
9 2013 3
我需要将 2011 年的数据分组在一列中,2012 年的数据分组在下一列中,依此类推。
2011 2012 2013
1 8 3 4
2 1 12 3
3 4 9 3
如何实现?
如果每个 'year' 的行数相同,一个选项是 unstack
unstack(df1, Male ~ year)
一种选择是使用 dplyr
和 tidyr
中的函数。
library(dplyr)
library(tidyr)
dt2 <- dt %>%
group_by(year) %>%
mutate(ID = 1:n()) %>%
spread(year, Male) %>%
select(-ID)
1
如果每年都有相同数量的数据,您可以 split
数据 cbind
使用基数 R
do.call(cbind, split(df$Male, df$year))
# 2011 2012 2013
#[1,] 8 3 4
#[2,] 1 12 3
#[3,] 4 9 3
2
如果每年没有相同数量的数据,可以使用rbind.fill
of plyr
df[10,] = c(2015, 5) #Add only one data for the year 2015
library(plyr)
setNames(object = data.frame(t(rbind.fill.matrix(lapply(split(df$Male, df$year), t)))),
nm = unique(df$year))
# 2011 2012 2013 2015
#1 8 3 4 5
#2 1 12 3 NA
#3 4 9 3 NA
3
另一种方法是使用 dcast
将数据从长格式转换为宽格式
df[10,] = c(2015, 5) #Add only one data for the year 2015
library(reshape2)
dcast(df, ave(df$Male, df$year, FUN = seq_along) ~ year, value.var = "Male")[,-1]
# 2011 2012 2013 2015
#1 8 3 4 5
#2 1 12 3 NA
#3 4 9 3 NA
我有这样的数据:
year Male
1 2011 8
2 2011 1
3 2011 4
4 2012 3
5 2012 12
6 2012 9
7 2013 4
8 2013 3
9 2013 3
我需要将 2011 年的数据分组在一列中,2012 年的数据分组在下一列中,依此类推。
2011 2012 2013
1 8 3 4
2 1 12 3
3 4 9 3
如何实现?
如果每个 'year' 的行数相同,一个选项是 unstack
unstack(df1, Male ~ year)
一种选择是使用 dplyr
和 tidyr
中的函数。
library(dplyr)
library(tidyr)
dt2 <- dt %>%
group_by(year) %>%
mutate(ID = 1:n()) %>%
spread(year, Male) %>%
select(-ID)
1
如果每年都有相同数量的数据,您可以 split
数据 cbind
使用基数 R
do.call(cbind, split(df$Male, df$year))
# 2011 2012 2013
#[1,] 8 3 4
#[2,] 1 12 3
#[3,] 4 9 3
2
如果每年没有相同数量的数据,可以使用rbind.fill
of plyr
df[10,] = c(2015, 5) #Add only one data for the year 2015
library(plyr)
setNames(object = data.frame(t(rbind.fill.matrix(lapply(split(df$Male, df$year), t)))),
nm = unique(df$year))
# 2011 2012 2013 2015
#1 8 3 4 5
#2 1 12 3 NA
#3 4 9 3 NA
3
另一种方法是使用 dcast
将数据从长格式转换为宽格式
df[10,] = c(2015, 5) #Add only one data for the year 2015
library(reshape2)
dcast(df, ave(df$Male, df$year, FUN = seq_along) ~ year, value.var = "Male")[,-1]
# 2011 2012 2013 2015
#1 8 3 4 5
#2 1 12 3 NA
#3 4 9 3 NA