【问题标题】:How to create this new column?如何创建这个新列?
【发布时间】:2021-06-14 13:39:08
【问题描述】:

使用 {tidyverse},我正在尝试创建一个具有高级条件的新变量。
这是我的例子:
非常感谢提前

mydf <- tibble(
  siren = c("a","b"),
  region_impl = c("24","11"),
  nbeta_reg24 = c(3,1),
  nbeta_reg11= c(5,2)
)

# What I want
# A tibble: 2 x 5
  siren region_impl nbeta_reg24 nbeta_reg11 nbeta_reg
  <chr> <chr>             <dbl>       <dbl>     <dbl>
1 a     24                    3           5         3
2 b     11                    1           2         2

【问题讨论】:

  • 你能解释一下这里的情况吗?
  • 我试过这样的mydf %&gt;% mutate( nbeta_reg = mydf$nbeta_reg24[mydf$region_impl=="24"]) )
  • nbeta_reg 是如何获得 2 的
  • 如果region_impl 列等于“24”,则新的nbeta_reg 列必须采用例如nbeta_reg24 列的值(“11”的解释相同)
  • 是的,第二行需要2region_impl 等于 11(=nbeta_reg11 列的值)

标签: r tidyverse


【解决方案1】:

这是一个矢量化选项 -

mydf <- data.frame(mydf)
mydf$nbeta_reg <- mydf[cbind(1:nrow(mydf), match(paste0('nbeta_reg', 
                       mydf$region_impl), names(mydf)))]
mydf

#  siren region_impl nbeta_reg24 nbeta_reg11 nbeta_reg
#1     a          24           3           5         3
#2     b          11           1           2         2

使用dplyr -

library(dplyr)

mydf %>%
  rowwise() %>%
  mutate(nbeta_reg = get(paste0('nbeta_reg', region_impl))) %>%
  ungroup

#  siren region_impl nbeta_reg24 nbeta_reg11 nbeta_reg
#  <chr> <chr>             <dbl>       <dbl>     <dbl>
#1 a     24                    3           5         3
#2 b     11                    1           2         2

【讨论】:

    【解决方案2】:

    我们可以在tidverse中使用select

    library(dplyr)
    mydf %>%
        rowwise %>% 
        mutate(nbetareg = select(cur_data(), ends_with(region_impl))[[1]]) %>%
        ungroup
    

    -输出

    # A tibble: 2 x 5
      siren region_impl nbeta_reg24 nbeta_reg11 nbetareg
      <chr> <chr>             <dbl>       <dbl>    <dbl>
    1 a     24                    3           5        3
    2 b     11                    1           2        2
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-09-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-04-13
      • 1970-01-01
      相关资源
      最近更新 更多