当前位置: 首页>>代码示例 >>用法及示例精选 >>正文


R tidyr chop 砍伐和砍伐


切割和取消切割保留数据帧的宽度,改变其长度。 chop() 通过将每个组中的行转换为列表列来缩短 dfunchop() 通过扩展列表列使 df 更长,以便列表列的每个元素在输出中获得自己的行。 chop()unchop() 是更复杂函数的构建块(例如 unnest()unnest_longer()unnest_wider() ),通常比交互式数据分析更适合编程。

用法

chop(data, cols, ..., error_call = current_env())

unchop(
  data,
  cols,
  ...,
  keep_empty = FALSE,
  ptype = NULL,
  error_call = current_env()
)

参数

data

一个 DataFrame 。

cols

< tidy-select > 要砍伐或取消砍伐的列。

对于 unchop() ,每列应该是包含广义向量的列表列(例如 NULL、原子向量、S3 向量、列表或数据帧的任意组合)。

...

这些点用于将来的扩展,并且必须为空。

error_call

当前运行函数的执行环境,例如caller_env() 。该函数将在错误消息中作为错误源被提及。有关详细信息,请参阅 abort()call 参数。

keep_empty

默认情况下,对于要取消切割/取消嵌套的列表中的每个元素,您都会获得一行输出。这意味着如果存在大小为 0 的元素(例如 NULL 或空 DataFrame 或向量),则整行将从输出中删除。如果要保留所有行,请使用 keep_empty = TRUE 将 size-0 元素替换为单行缺失值。

ptype

(可选)列 name-prototype 的命名列表对强制 cols,覆盖通过组合各个值猜测的默认值。或者,可以提供单个空 ptype,它将应用于所有 cols

细节

一般来说,unchopping 比 chopping 更有用,因为它简化了复杂的数据结构,并且 nest() ing 通常比 chop() ing 更合适,因为它可以更好地保留观察值之间的连接。

chop() 创建类 vctrs::list_of() 的列表列,以确保在清空切碎的数据帧时保持一致的行为。例如,这有助于在往返切碎和取消切碎之后恢复原始列类型。由于 <list_of> 会跟踪其元素的类型,因此 unchop() 甚至能够为空列表列重建正确的向量类型。

例子

# Chop ----------------------------------------------------------------------
df <- tibble(x = c(1, 1, 1, 2, 2, 3), y = 1:6, z = 6:1)
# Note that we get one row of output for each unique combination of
# non-chopped variables
df %>% chop(c(y, z))
#> # A tibble: 3 × 3
#>       x           y           z
#>   <dbl> <list<int>> <list<int>>
#> 1     1         [3]         [3]
#> 2     2         [2]         [2]
#> 3     3         [1]         [1]
# cf nest
df %>% nest(data = c(y, z))
#> # A tibble: 3 × 2
#>       x data            
#>   <dbl> <list>          
#> 1     1 <tibble [3 × 2]>
#> 2     2 <tibble [2 × 2]>
#> 3     3 <tibble [1 × 2]>

# Unchop --------------------------------------------------------------------
df <- tibble(x = 1:4, y = list(integer(), 1L, 1:2, 1:3))
df %>% unchop(y)
#> # A tibble: 6 × 2
#>       x     y
#>   <int> <int>
#> 1     2     1
#> 2     3     1
#> 3     3     2
#> 4     4     1
#> 5     4     2
#> 6     4     3
df %>% unchop(y, keep_empty = TRUE)
#> # A tibble: 7 × 2
#>       x     y
#>   <int> <int>
#> 1     1    NA
#> 2     2     1
#> 3     3     1
#> 4     3     2
#> 5     4     1
#> 6     4     2
#> 7     4     3

# unchop will error if the types are not compatible:
df <- tibble(x = 1:2, y = list("1", 1:3))
try(df %>% unchop(y))
#> Error in list_unchop(col, ptype = col_ptype) : 
#>   Can't combine `x[[1]]` <character> and `x[[2]]` <integer>.

# Unchopping a list-col of data frames must generate a df-col because
# unchop leaves the column names unchanged
df <- tibble(x = 1:3, y = list(NULL, tibble(x = 1), tibble(y = 1:2)))
df %>% unchop(y)
#> # A tibble: 3 × 2
#>       x   y$x    $y
#>   <int> <dbl> <int>
#> 1     2     1    NA
#> 2     3    NA     1
#> 3     3    NA     2
df %>% unchop(y, keep_empty = TRUE)
#> # A tibble: 4 × 2
#>       x   y$x    $y
#>   <int> <dbl> <int>
#> 1     1    NA    NA
#> 2     2     1    NA
#> 3     3    NA     1
#> 4     3    NA     2
源代码:R/chop.R

相关用法


注:本文由纯净天空筛选整理自Hadley Wickham等大神的英文原创作品 Chop and unchop。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。