【问题标题】:How to add columns in a dataframe using a vector? [duplicate]如何使用向量在数据框中添加列? [复制]
【发布时间】:2021-06-09 09:39:47
【问题描述】:

我想从现有向量中添加数据框中的列(用 NA 填充)。
这是我的示例(我想要 2 个新列“State”和“Type”,NA)
非常感谢!

names_variables <- c("Sepal.Length",
                     "Sepal.Width",
                     "Petal.Length",
                     "Petal.Width",
                     "Species",
                     "State",
                     "Type")

difference <- setdiff(names_variables,names(iris))

# Not working
if (length(difference>0)) {
  resultat <- iris %>% 
    mutate(
      for (var_to_add in (difference)) {
        !!sym(var_to_add) := NA)
      }
    )
}

【问题讨论】:

标签: r dplyr


【解决方案1】:

我不确定结果应该是什么,但我们可以创建一个新变量的命名向量并将其拼接到mutate!!!

library(dplyr)

names_variables <- c("Sepal.Length",
                     "Sepal.Width",
                     "Petal.Length",
                     "Petal.Width",
                     "Species",
                     "State",
                     "Type")

difference <- setdiff(names_variables,names(iris))
new_vars <- setNames(rep(NA, length(difference)), difference)

iris %>%
  as_tibble() %>% # for printing
  mutate(!!! new_vars)

#> # A tibble: 150 x 7
#>    Sepal.Length Sepal.Width Petal.Length Petal.Width Species State Type 
#>           <dbl>       <dbl>        <dbl>       <dbl> <fct>   <lgl> <lgl>
#>  1          5.1         3.5          1.4         0.2 setosa  NA    NA   
#>  2          4.9         3            1.4         0.2 setosa  NA    NA   
#>  3          4.7         3.2          1.3         0.2 setosa  NA    NA   
#>  4          4.6         3.1          1.5         0.2 setosa  NA    NA   
#>  5          5           3.6          1.4         0.2 setosa  NA    NA   
#>  6          5.4         3.9          1.7         0.4 setosa  NA    NA   
#>  7          4.6         3.4          1.4         0.3 setosa  NA    NA   
#>  8          5           3.4          1.5         0.2 setosa  NA    NA   
#>  9          4.4         2.9          1.4         0.2 setosa  NA    NA   
#> 10          4.9         3.1          1.5         0.1 setosa  NA    NA   
#> # … with 140 more rows

reprex package (v0.3.0) 于 2021-06-09 创建


或者使用基数 r:

names_variables <- c("Sepal.Length",
                     "Sepal.Width",
                     "Petal.Length",
                     "Petal.Width",
                     "Species",
                     "State",
                     "Type")

difference <- setdiff(names_variables, names(iris))

iris[, difference] <- NA

head(iris)

#>   Sepal.Length Sepal.Width Petal.Length Petal.Width Species State Type
#> 1          5.1         3.5          1.4         0.2  setosa    NA   NA
#> 2          4.9         3.0          1.4         0.2  setosa    NA   NA
#> 3          4.7         3.2          1.3         0.2  setosa    NA   NA
#> 4          4.6         3.1          1.5         0.2  setosa    NA   NA
#> 5          5.0         3.6          1.4         0.2  setosa    NA   NA
#> 6          5.4         3.9          1.7         0.4  setosa    NA   NA

reprex package (v0.3.0) 于 2021-06-09 创建

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-12-20
    • 2016-12-19
    • 2023-03-14
    • 2017-08-05
    • 2021-04-17
    • 2021-12-28
    • 2019-09-09
    相关资源
    最近更新 更多