【问题标题】:Creating "duplicate" rows with one variable in R在 R 中使用一个变量创建“重复”行
【发布时间】:2016-03-09 11:53:17
【问题描述】:

很难为这个问题命名,因为我不知道如何称呼这个动作。然而,这个想法相当简单。我有一个数据框,其中一些值是向量。

letters <- c("a", "b", "c", "d", "e")

numbers <- list(34, 23, c(23, 34, 45), 23, c(45,56,43,12))

df <- data.frame(letters)
df$numbers <- numbers

df

    letters numbers
1   a   34
2   b   23
3   c   c(23, 34, 45)
4   d   23
5   e   c(45, 56, 43, 12)

我想要获得的是一个data.frame,它将列号中包含向量的所有行与这些向量中的对象数重复。它们必须完全重复,但数字列除外,它应该是可变的。像这样:

    letters numbers
1   a   34
2   b   23
3   c   23
4   c   24
5   c   45
6   d   23
7   e   55
8   e   56
9   e   43
10  e   12

有什么简单的解决办法吗?

【问题讨论】:

    标签: r


    【解决方案1】:

    tidyr 选项是最简洁的,但如果你想使用 base R,你可以这样做:

    stack(setNames(numbers, letters))
    
    #    values ind
    # 1      34   a
    # 2      23   b
    # 3      23   c
    # 4      34   c
    # 5      45   c
    # 6      23   d
    # 7      45   e
    # 8      56   e
    # 9      43   e
    # 10     12   e
    

    【讨论】:

    • 也感谢您的建议!
    【解决方案2】:

    我们可以使用unnest

    library(tidyr)
    unnest(df, numbers)
    #   letters numbers
    #    (fctr)   (dbl)
    #1        a      34
    #2        b      23
    #3        c      23
    #4        c      34
    #5        c      45
    #6        d      23
    #7        e      45
    #8        e      56
    #9        e      43
    #10       e      12
    

    【讨论】:

    • 美丽。正是我想要的。非常整洁。
    猜你喜欢
    • 2017-01-07
    • 1970-01-01
    • 2020-04-25
    • 2016-02-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-05-24
    相关资源
    最近更新 更多