【问题标题】:Add vector as a column to a data.frame with fill = NA使用 fill = NA 将向量作为列添加到 data.frame
【发布时间】:2021-04-19 22:33:28
【问题描述】:

我有一个长度为 3 的向量 (my_vector)。

我想将此向量作为新列绑定到现有的 data.frame (my_df)。

但是,data.frame 有 4 行。因此,在第 4 行,新列值(或 my_df[4,3])应该是 NA。

我怎样才能做到这一点?

当我执行my_df$new_column <- my_vector 时,我收到以下错误消息: 替换有 3 行,数据有 4 行


这里是my_df(包括4行):

> dput(my_df)

structure(list(
      person = c("Oleg", "Yurii", "Igor", "Mikhail"),
      role = structure(c(1L, 2L, 2L, 3L), class = "factor", .Label = c("EDITOR-IN-CHIEF", "DEPUTY EDITORS-IN-CHIEF", "Coordinating Editor"))),
      class = "data.frame", row.names = c(NA,  -4L)
)

还有my_vector(长度为3):

> dput(my_vector)

c("Lomonosov University", "Russian Academy of Sciences", "Institute of Acoustics, Moscow, Russia")

【问题讨论】:

标签: r dataframe vector data-binding fillna


【解决方案1】:

我们创建一个NA 列,然后根据向量的长度分配“my_vector”。这里seq_along(my_vector)返回1:3,因此前3个元素被替换为'my_vector'值

my_df$new_column <- NA_character_
my_df$new_column[seq_along(my_vector)] <- my_vector

或者如果我们使用length&lt;-在末尾填充NA,这可以一步完成

my_df$new_column <-  `length<-`(my_vector, nrow(my_df))

-输出

my_df
#   person                    role                             new_column
#1    Oleg         EDITOR-IN-CHIEF                   Lomonosov University
#2   Yurii DEPUTY EDITORS-IN-CHIEF            Russian Academy of Sciences
#3    Igor DEPUTY EDITORS-IN-CHIEF Institute of Acoustics, Moscow, Russia
#4 Mikhail     Coordinating Editor                                   <NA>

【讨论】:

    【解决方案2】:

    您可以将 my_vector 中的值作为子集,其长度与 my_df 相同。

    my_df$new_column <- my_vector[seq_len(nrow(my_df))]
    my_df
    
    #   person                    role                             new_column
    #1    Oleg         EDITOR-IN-CHIEF                   Lomonosov University
    #2   Yurii DEPUTY EDITORS-IN-CHIEF            Russian Academy of Sciences
    #3    Igor DEPUTY EDITORS-IN-CHIEF Institute of Acoustics, Moscow, Russia
    #4 Mikhail     Coordinating Editor                                   <NA>
    

    【讨论】:

      【解决方案3】:

      data.table 选项

      setDT(my_df)[, new := NA][, new := replace(new, seq_along(my_vector), my_vector)]
      

      给予

      > my_df
          person                    role                                    new
      1:    Oleg         EDITOR-IN-CHIEF                   Lomonosov University
      2:   Yurii DEPUTY EDITORS-IN-CHIEF            Russian Academy of Sciences
      3:    Igor DEPUTY EDITORS-IN-CHIEF Institute of Acoustics, Moscow, Russia
      4: Mikhail     Coordinating Editor                                   <NA>
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-02-09
        • 1970-01-01
        • 1970-01-01
        • 2017-09-01
        • 2015-05-16
        • 2014-07-08
        • 1970-01-01
        • 2019-10-03
        相关资源
        最近更新 更多