r-如何将行添加到嵌套的数据帧中



我有一个结构如下的对象,这对我来说并不常见(数据帧中有一个数据帧,其中有一个列表(。我想添加新的观察结果,所有变量(除了1(的值都相同;这里的值通过索引来自一个额外的列表(。对象的嵌套结构使得使用循环很难做到这一点。因此,我复制了dput的输出并在其中输入值。我主要使用函数rep((和once unlist((。执行它并打印对象时,我会收到一条关于数据帧损坏的警告消息,并且对象没有更改。

将行添加到给定结构中的常用方法是什么?我试着绕过去,但还没有成功。

deput(x)
structure(list(collapsed = c(FALSE, FALSE, FALSE), enabled = c(TRUE, 
TRUE, TRUE), id = c("Bilateral", "AlphaTree", "Merge"), parameters = structure(list(
    bands = list(c(1L, 2L, 3L, 5L), c(1L, 2L, 3L, 5L), NULL), 
    intensity = c(3L, NA, NA), saveToDisk = c(FALSE, NA, NA), 
    Strategy = c(NA, "maxDiff", NA), Attribute = c(NA, 
    "", NA), om = c(NA, 27L, NA), Condition = c(NA, NA, 
    "num < 10"), check = c(NA, NA, FALSE), ite = c(NA, 
    NA, 10L), Algo = c(NA, NA, "closest mean")), class = "data.frame", row.names = c(NA, 
3L)), type = c("PreProc", "Seg", "Op")), class = "data.frame", row.names = c(NA, 
3L))

我们可以使用tibble中的add_row-未在add_row中传递的列值将是该行的NA,或者如果是list,则将转到NULL

library(dplyr)
library(tibble)
x1 <- x %>%
    add_row(collapsed = FALSE)

-输出

x1
  collapsed enabled        id parameters.bands parameters.intensity parameters.saveToDisk parameters.Strategy parameters.Attribute parameters.om
1     FALSE    TRUE Bilateral       1, 2, 3, 5                    3                 FALSE                <NA>                 <NA>            NA
2     FALSE    TRUE AlphaTree       1, 2, 3, 5                   NA                    NA             maxDiff                                 27
3     FALSE    TRUE     Merge             NULL                   NA                    NA                <NA>                 <NA>            NA
4     FALSE      NA      <NA>             NULL                   NA                    NA                <NA>                 <NA>            NA
  parameters.Condition parameters.check parameters.ite parameters.Algo    type
1                 <NA>               NA             NA            <NA> PreProc
2                 <NA>               NA             NA            <NA>     Seg
3             num < 10            FALSE             10    closest mean      Op
4                 <NA>               NA             NA            <NA>    <NA>
> str(x1)
'data.frame':   4 obs. of  5 variables:
 $ collapsed : logi  FALSE FALSE FALSE FALSE
 $ enabled   : logi  TRUE TRUE TRUE NA
 $ id        : chr  "Bilateral" "AlphaTree" "Merge" NA
 $ parameters:'data.frame': 4 obs. of  10 variables:
  ..$ bands     :List of 4
  .. ..$ : int  1 2 3 5
  .. ..$ : int  1 2 3 5
  .. ..$ : NULL
  .. ..$ : NULL
  ..$ intensity : int  3 NA NA NA
  ..$ saveToDisk: logi  FALSE NA NA NA
  ..$ Strategy  : chr  NA "maxDiff" NA NA
  ..$ Attribute : chr  NA "" NA NA
  ..$ om        : int  NA 27 NA NA
  ..$ Condition : chr  NA NA "num < 10" NA
  ..$ check     : logi  NA NA FALSE NA
  ..$ ite       : int  NA NA 10 NA
  ..$ Algo      : chr  NA NA "closest mean" NA
 $ type      : chr  "PreProc" "Seg" "Op" NA

如果我们想向data.frame列中的一些元素添加值,那么unpack添加值,然后pack再次添加

library(tidyr)
x1 <- x%>%
     unpack(parameters)%>%
     add_row(collapsed = FALSE, Condition = "num > 5" ) %>%
     pack(parameters = names(x$parameters))

-输出

> x1
# A tibble: 4 × 5
  collapsed enabled id        type    parameters$bands $intensity $saveToDisk $Strategy $Attribute   $om $Condition $check  $ite $Algo       
  <lgl>     <lgl>   <chr>     <chr>   <list>                <int> <lgl>       <chr>     <chr>      <int> <chr>      <lgl>  <int> <chr>       
1 FALSE     TRUE    Bilateral PreProc <int [4]>                 3 FALSE       <NA>       <NA>         NA <NA>       NA        NA <NA>        
2 FALSE     TRUE    AlphaTree Seg     <int [4]>                NA NA          maxDiff   ""            27 <NA>       NA        NA <NA>        
3 FALSE     TRUE    Merge     Op      <NULL>                   NA NA          <NA>       <NA>         NA num < 10   FALSE     10 closest mean
4 FALSE     NA      <NA>      <NA>    <NULL>                   NA NA          <NA>       <NA>         NA num > 5    NA        NA <NA>        
> str(x1)
tibble [4 × 5] (S3: tbl_df/tbl/data.frame)
 $ collapsed : logi [1:4] FALSE FALSE FALSE FALSE
 $ enabled   : logi [1:4] TRUE TRUE TRUE NA
 $ id        : chr [1:4] "Bilateral" "AlphaTree" "Merge" NA
 $ type      : chr [1:4] "PreProc" "Seg" "Op" NA
 $ parameters: tibble [4 × 10] (S3: tbl_df/tbl/data.frame)
  ..$ bands     :List of 4
  .. ..$ : int [1:4] 1 2 3 5
  .. ..$ : int [1:4] 1 2 3 5
  .. ..$ : NULL
  .. ..$ : NULL
  ..$ intensity : int [1:4] 3 NA NA NA
  ..$ saveToDisk: logi [1:4] FALSE NA NA NA
  ..$ Strategy  : chr [1:4] NA "maxDiff" NA NA
  ..$ Attribute : chr [1:4] NA "" NA NA
  ..$ om        : int [1:4] NA 27 NA NA
  ..$ Condition : chr [1:4] NA NA "num < 10" "num > 5"
  ..$ check     : logi [1:4] NA NA FALSE NA
  ..$ ite       : int [1:4] NA NA 10 NA
  ..$ Algo      : chr [1:4] NA NA "closest mean" NA

相关内容

  • 没有找到相关文章

最新更新