【问题标题】:Expand the Dataframe - Adding Rows not Columns展开数据框 - 添加行而不是列
【发布时间】:2020-12-29 13:40:56
【问题描述】:

我有一个数据框,其中包含一个变量,例如县 ID。我有 401 个县 ID,所以我有 401 行。

'data.frame':   401 obs. of  1 variable:
 $ KRS: num  1001 1002 1003 1004 1051 ...

head(fs)
   KRS
1 1001
2 1002
3 1003
4 1004
5 1051
6 1053

我想添加一个变量,它代表另一个具有 6 个级别的“类别”来扩展数据框,所以我得到了 401*6=2406 行(观察)而不是 401 行(观察)。

应该是这样的:

   KRS  V2
1  1001  1
2  1001  2
3  1001  3
4  1001  4
5  1001  5
6  1001  6
7  1002  1
8  1002  2
9  1002  3
10 1002  4
11 1002  5
12 1002  6

and so on....

我希望你明白我的意思,我希望你能帮助我。

谢谢!

最好的问候

阿里

【问题讨论】:

标签: r dataframe


【解决方案1】:

您可以使用tidyr::expand_grid()

library(tidyr)

expand_grid(KRS = fs$KRS,V2 = 1:6)

tidyr::expand():

fs %>% 
  tidyr::expand(KRS, V2 = 1:6)

甚至是来自基础 R 的 expand.grid()

expand.grid(fs$KRS, 1:6)

【讨论】:

    【解决方案2】:

    这行得通吗:

    library(dplyr)
    library(tidyr)
    df %>% uncount(weights = 6) %>% group_by(KRS) %>% mutate(V2 = row_number())
    # A tibble: 36 x 2
    # Groups:   KRS [6]
         KRS    V2
       <dbl> <int>
     1  1001     1
     2  1001     2
     3  1001     3
     4  1001     4
     5  1001     5
     6  1001     6
     7  1002     1
     8  1002     2
     9  1002     3
    10  1002     4
    # ... with 26 more rows
    

    使用的数据:

    df
       KRS
    1 1001
    2 1002
    3 1003
    4 1004
    5 1051
    6 1053
    

    【讨论】:

    • 这也有效,但顺利的是@Jean-Marie Pivette。不过还是谢谢你!!!!!!
    【解决方案3】:

    你可以使用rep:

    fd <- data.frame(
      KRS = rep(fd$KRS, each = 6),
      V2 = rep(1:6, length(fd$KRS))
    )
    
    fd
    # KRS V2
    # 1  1001  1
    # 2  1001  2
    # 3  1001  3
    # 4  1001  4
    # 5  1001  5
    # 6  1001  6
    # 7  1002  1
    # 8  1002  2
    # 9  1002  3
    # 10 1002  4
    # 11 1002  5
    # 12 1002  6
    # 13 1003  1
    # 14 1003  2
    # 15 1003  3
    # 16 1003  4
    # 17 1003  5
    # 18 1003  6
    # 19 1004  1
    # 20 1004  2
    # 21 1004  3
    # 22 1004  4
    # 23 1004  5
    # 24 1004  6
    # 25 1050  1
    # 26 1050  2
    # 27 1050  3
    # 28 1050  4
    # 29 1050  5
    # 30 1050  6
    

    【讨论】:

    • 不幸的是,我收到了一条错误消息arguments imply differing number of rows: 2406, 30
    • AAAH 我必须纠正自己,必须将V2 = rep(1:6, 5)) 更改为V2 = rep(1:6, 401)) 所以它也可以!非常感谢!
    • @AriWhatElse 不,你是对的,我的初始版本仅适用于我的测试数据。为了完整起见,我更正了它。
    猜你喜欢
    • 2018-08-04
    • 2018-12-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-09-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多