我有一个结构如下的对象,这对我来说并不常见(数据帧中有一个数据帧,其中有一个列表(。我想添加新的观察结果,所有变量(除了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