首页 > 解决方案 > 创建具有重复行的数据框

问题描述

我想创建一个重复行的数据框。

这是我的原始数据集:

> mtcars_columns_a
  variables_interest data_set data_set_and_variables_interest      mean
1                mpg   mtcars                      mtcars$mpg  20.09062
2               disp   mtcars                     mtcars$disp 230.72188
3                 hp   mtcars                       mtcars$hp 146.68750

这是我的愿望数据集

> mtcars_columns_b
  variables_interest data_set data_set_and_variables_interest      mean
1                mpg   mtcars                      mtcars$mpg  20.09062
2                mpg   mtcars                      mtcars$mpg  20.09062
3               disp   mtcars                     mtcars$disp 230.72188
4               disp   mtcars                     mtcars$disp 230.72188
5                 hp   mtcars                       mtcars$hp 146.68750
6                 hp   mtcars                       mtcars$hp 146.68750

我知道如何手动完成很长的路要走,但这既费时又死板。有没有更自动化、更灵活的更快方法来做到这一点?



这是我用来创建数据集的代码:

# mtcars data

## displays data
mtcars

## 3 row data set

### lists columns of interest
# ---- NOTE: REQUIRES MANUAL INPUT
# ---- NOTE: lists variables of interest
mtcars_columns_a <- 
  data.frame(
    c(
      "mpg",
      "disp",
      "hp"
    )
  )
# ---- NOTE: REQUIRES MANUAL INPUT
# ---- NOTE: adds colnames
names(mtcars_columns_a)[names(mtcars_columns_a) == 'c..mpg....disp....hp..'] <- 'variables_interest'

### adds data set info
mtcars_columns_a$data_set <- 
  c("mtcars")

### creates data_set_and_variables_interest column
mtcars_columns_a$data_set_and_variables_interest <- 
  paste(mtcars_columns_a$data_set,mtcars_columns_a$variables_interest,sep = "$")

### creates mean column
mtcars_columns_a$mean <-
  c(
    mean(mtcars$mpg),
    mean(mtcars$disp),
    mean(mtcars$hp)
  )

## 6 row data set., the long way

### lists columns of interest
# ---- NOTE: REQUIRES MANUAL INPUT
# ---- NOTE: lists variables of interest
mtcars_columns_b <- 
  data.frame(
    c(
      "mpg",
      "mpg",
      "disp",
      "disp",
      "hp",
      "hp"
    )
  )
# ---- NOTE: REQUIRES MANUAL INPUT
# ---- NOTE: adds colnames
names(mtcars_columns_b)[names(mtcars_columns_b) == 'c..mpg....mpg....disp....disp....hp....hp..'] <- 'variables_interest'

### adds data set info
mtcars_columns_b$data_set <- 
  c("mtcars")

### creates data_set_and_variables_interest column
mtcars_columns_b$data_set_and_variables_interest <- 
  paste(mtcars_columns_b$data_set,mtcars_columns_b$variables_interest,sep = "$")

### creates mean column
mtcars_columns_b$mean <-
  c(
    mean(mtcars$mpg),
    mean(mtcars$mpg),
    mean(mtcars$disp),
    mean(mtcars$disp),
    mean(mtcars$hp),
    mean(mtcars$hp)
  )

标签: riterationrepeat

解决方案


另一种选择是uncount

library(dplyr)
library(tidyr)
mtcars_columns_a %>%
   uncount(2)

推荐阅读