我最近在处理数据

year <- c('1990', '1990', '1994', '2000', '2012')
n1 <- c(30, 70, 20, 31, 10)
n2 <- c(40, 60, 20, 21, 8)
r1 <- c(0, 9, 3, 4, 4)
r2 <- c(3, 9, 1, 2, 0)
data <- data.frame(year, n1, n2, r1, r2)

我想把每一行分成两行,其中第1行包括n1和r1,第2行包括n2和r2.

预期的结果是这样的;

> data
   year type  n r
1  1990    0 30 0
2  1990    1 40 3
3  1990    0 70 9
4  1990    1 60 9
5  1994    0 20 3
6  1994    1 20 1
7  2000    0 31 4
8  2000    1 21 2
9  2012    0 10 4
10 2012    1  8 0

推荐答案

当不需要特定订单时,可以使用repc.

with(data, data.frame(year, type = rep(0:1, each=length(year)),
                      n = c(n1, n2), r = c(r1, r2)))
#   year type  n r
#1  1990    0 30 0
#2  1990    0 70 9
#3  1994    0 20 3
#4  2000    0 31 4
#5  2012    0 10 4
#6  1990    1 40 3
#7  1990    1 60 9
#8  1994    1 20 1
#9  2000    1 21 2
#10 2012    1  8 0

或者维持秩序:

with(data, data.frame(year, type = rep(0:1, each=length(year)),
                      n = c(n1, n2), r = c(r1, r2))[
             c(matrix(seq(1:(2*length(year))), 2, byrow=TRUE)),])
#   year type  n r
#1  1990    0 30 0
#6  1990    1 40 3
#2  1990    0 70 9
#7  1990    1 60 9
#3  1994    0 20 3
#8  1994    1 20 1
#4  2000    0 31 4
#9  2000    1 21 2
#5  2012    0 10 4
#10 2012    1  8 0

或者另一种变体重复原始数据集并更新内容.

. <- data[rep(seq_len(nrow(data)), each=2),]
.$n1[c(FALSE, TRUE)] <- .$n2[c(TRUE, FALSE)]
.$r1[c(FALSE, TRUE)] <- .$r2[c(TRUE, FALSE)]
with(., data.frame(year, type = 0:1, n=n1, r=r1))
#   year type  n r
#1  1990    0 30 0
#2  1990    1 40 3
#3  1990    0 70 9
#4  1990    1 60 9
#5  1994    0 20 3
#6  1994    1 20 1
#7  2000    0 31 4
#8  2000    1 21 2
#9  2012    0 10 4
#10 2012    1  8 0

R相关问答推荐

使用tidyverse / Mutate的存款账户余额

更改默认系列1以更改名称

r替换lme S4对象的字符串的一部分

在for循环中转换rabrame

当月份额减go 当月份额

我如何才能找到FAMILY=POISSON(LINK=&Q;LOG&Q;)中的模型预测指定值的日期?

使用rest从header(h2,h3,table)提取分层信息

如何将R中数据帧中的任何Nas替换为最后4个值

如何通过匹配R中所有可能的组合来从宽到长旋转多个列?

用两种 colored颜色 填充方框图

为什么我使用geom_density的绘图不能到达x轴?

以字符格式导入的ExcelElectron 表格日期列标题

根据列表中项目的名称合并数据框和列表

如何从向量构造一系列双边公式

我如何go 掉盒子图底部的数字?

在ggplot2上从多个数据框创建复杂的自定义图形

构建一个6/49彩票模拟系统

从两个数据帧中,有没有办法计算R中一列的唯一值?

使用卡环从R中的列中删除单位(&C)

R:部分修改矩阵对角线的有效方法