r - 使列表的每个元素都有自己的行(基于列值的列表)

标签 r dataframe dplyr tidyr

我有这个 data.frame 对象:

subject <- c("Nantes", "Nantes", "Nantes", "Brest", "Brest", "Rennes")
page <- c(1, 2, 3, 1, 2, 1)
rows <- c(2, 3, 4, 6, 2, 3)
df <- data.frame (subject,page, rows)

这是输出:
subject   page    rows 
Nantes    1       2     
Nantes    2       3     
Nantes    3       4     
Brest     1       6     
Brest     2       2     
Rennes    1       3

南特的主题:第 1 页,第 2 页,第 3 页。
每个页面都有不同的行数。对于南特,page1 有 2 行。

我想要的是:根据 1:nrow 序列复制每一行。

例如:我需要复制南特第 1 页两次
subject   page    rows 
Nantes    1       1     
Nantes    1       2     
Nantes    2       1 
Nantes    2       2
Nantes    2       3
Nantes    3       1
Nantes    3       2
Nantes    3       3
Nantes    3       3
Nantes    3       4 
Brest     1       1
Brest     1       2 
Brest     1       3 
Brest     1       4 
Brest     1       5 
Brest     1       6     
Rennes    1       1
Rennes    1       2
Rennes    1       3

基于 dplyr duplicate each line by a sequence我可以使用 unnest 功能,但无法解决我的问题。

最佳答案

在基础 R 中,你可以做

dfNew <- data.frame(subject=rep(df$subject, df$rows),
                    page=rep(df$page, df$rows),
                    rows=sequence(df$rows))
rep在第二个位置使用向量参数将第一个位置中的元素重复相应的次数。 sequence使用整数向量返回从 1 到每个值的计数。
dfNew
   subject page rows
1   Nantes    1    1
2   Nantes    1    2
3   Nantes    2    1
4   Nantes    2    2
5   Nantes    2    3
6   Nantes    3    1
7   Nantes    3    2
8   Nantes    3    3
9   Nantes    3    4
10   Brest    1    1
11   Brest    1    2
12   Brest    1    3
13   Brest    1    4
14   Brest    1    5
15   Brest    1    6
16   Brest    2    1
17   Brest    2    2
18  Rennes    1    1
19  Rennes    1    2
20  Rennes    1    3

也许使用 with 更清洁一点:
dfNew <- with(df, data.frame(subject=rep(subject, rows),
                             page=rep(page, rows),
                             rows=sequence(rows)))

关于r - 使列表的每个元素都有自己的行(基于列值的列表),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45941562/

相关文章:

Pandas 创建一个包含正确顺序列的 DataFrame

python - 在Python中提取数据帧的groupby值

r - 使用 dplyr 的括号转义表名称

r - 在 R 中按组创建连续年份的计数

r - 生成给定年份的随机日期

r - 如何更改pairs()的轴位置?

python - 将 3 列数据帧转换为矩阵,其中列由范围定义

r - 在同一页面上绘制多个 ggplot2

r - 移动平均线变化窗口

r - 在 dplyr 中选择带有特殊字符的名称