这是一个低级数据透视接口,受 cdata 包启发,允许您使用 DataFrame 说明数据透视。
用法
pivot_longer_spec(
data,
spec,
...,
cols_vary = "fastest",
names_repair = "check_unique",
values_drop_na = FALSE,
values_ptypes = NULL,
values_transform = NULL,
error_call = current_env()
)
build_longer_spec(
data,
cols,
...,
names_to = "name",
values_to = "value",
names_prefix = NULL,
names_sep = NULL,
names_pattern = NULL,
names_ptypes = NULL,
names_transform = NULL,
error_call = current_env()
)
参数
- data
-
要旋转的 DataFrame 。
- spec
-
规范 DataFrame 。这对于更复杂的数据透视非常有用,因为它可以让您更好地控制存储在列名称中的元数据如何转换为结果中的列。
必须是包含字符
.name
和.value
列的 DataFrame 。spec
中的其他列应命名为与数据集长格式的列匹配,并包含与从宽格式转换的列相对应的值。特殊的.seq
变量用于在内部消除行的歧义;旋转后它会自动移除。 - ...
-
这些点用于将来的扩展,并且必须为空。
- cols_vary
-
当将
cols
转换为更长的格式时,输出行应如何相对于其原始行号排列?-
"fastest"
(默认值)将cols
中的各个行在输出中保持靠近在一起。当data
中至少有一个不参与旋转过程的键列时,这通常会产生直观的有序输出。 -
"slowest"
将cols
中的各个列在输出中紧密结合在一起。当您在旋转过程中使用data
中的所有列时,这通常会产生直观有序的输出。
-
- names_repair
-
如果输出具有无效的列名称,会发生什么情况?默认情况下,如果列重复,
"check_unique"
将出错。使用"minimal"
允许输出中存在重复项,或使用"unique"
通过添加数字后缀来消除重复项。有关更多选项,请参阅vctrs::vec_as_names()
。 - values_drop_na
-
如果
TRUE
,将删除value_to
列中仅包含NA
的行。这有效地将显式缺失值转换为隐式缺失值,通常仅当data
中的缺失值由其结构创建时才使用。 - error_call
-
当前运行函数的执行环境,例如
caller_env()
。该函数将在错误消息中作为错误源被提及。有关详细信息,请参阅abort()
的call
参数。 - cols
-
<
tidy-select
> 要转换为更长格式的列。 - names_to
-
一个字符向量,指定要根据
cols
指定的data
的列名称中存储的信息创建的新列。-
如果长度为 0,或者提供
NULL
,则不会创建任何列。 -
如果长度为 1,将创建一个列,其中包含
cols
指定的列名称。 -
如果长度 >1,将创建多列。在这种情况下,必须提供
names_sep
或names_pattern
之一来指定如何拆分列名。您还可以利用两个额外的字符值:-
NA
将丢弃列名的相应组成部分。 -
".value"
表示列名称的相应组件定义包含单元格值的输出列的名称,完全覆盖values_to
。
-
-
- values_to
-
一个字符串,指定要根据单元格值中存储的数据创建的列的名称。如果
names_to
是包含特殊.value
标记的字符,则该值将被忽略,并且值列的名称将从部分现有列名称派生。 - names_prefix
-
用于从每个变量名称开头删除匹配文本的正则表达式。
- names_sep, names_pattern
-
如果
names_to
包含多个值,这些参数控制列名的分解方式。names_sep
采用与separate()
相同的规范,并且可以是数字向量(指定要中断的位置),也可以是单个字符串(指定要拆分的正则表达式)。names_pattern
采用与extract()
相同的规范,即包含匹配组的正则表达式 (()
)。如果这些参数没有给您足够的控制权,请使用
pivot_longer_spec()
创建规范对象并根据需要手动处理。 - names_ptypes, values_ptypes
-
(可选)列 name-prototype 对的列表。或者,可以提供一个空原型,它将应用于所有列。原型(或简称 ptype)是一个零长度向量(如
integer()
或numeric()
),它定义向量的类型、类和属性。如果您想确认创建的列是您期望的类型,请使用这些参数。请注意,如果您想更改(而不是确认)特定列的类型,则应使用names_transform
或values_transform
代替。 - names_transform, values_transform
-
(可选)列 name-function 对的列表。或者,可以提供单个函数,该函数将应用于所有列。如果需要更改特定列的类型,请使用这些参数。例如,
names_transform = list(week = as.integer)
会将名为week
的字符变量转换为整数。如果未指定,
names_to
生成的列的类型将为字符,values_to
生成的变量的类型将为用于生成它们的输入列的通用类型。
例子
# See vignette("pivot") for examples and explanation
# Use `build_longer_spec()` to build `spec` using similar syntax to `pivot_longer()`
# and run `pivot_longer_spec()` based on `spec`.
spec <- relig_income %>% build_longer_spec(
cols = !religion,
names_to = "income",
values_to = "count"
)
spec
#> # A tibble: 10 × 3
#> .name .value income
#> <chr> <chr> <chr>
#> 1 <$10k count <$10k
#> 2 $10-20k count $10-20k
#> 3 $20-30k count $20-30k
#> 4 $30-40k count $30-40k
#> 5 $40-50k count $40-50k
#> 6 $50-75k count $50-75k
#> 7 $75-100k count $75-100k
#> 8 $100-150k count $100-150k
#> 9 >150k count >150k
#> 10 Don't know/refused count Don't know/refused
pivot_longer_spec(relig_income, spec)
#> # A tibble: 180 × 3
#> religion income count
#> <chr> <chr> <dbl>
#> 1 Agnostic <$10k 27
#> 2 Agnostic $10-20k 34
#> 3 Agnostic $20-30k 60
#> 4 Agnostic $30-40k 81
#> 5 Agnostic $40-50k 76
#> 6 Agnostic $50-75k 137
#> 7 Agnostic $75-100k 122
#> 8 Agnostic $100-150k 109
#> 9 Agnostic >150k 84
#> 10 Agnostic Don't know/refused 96
#> # … with 170 more rows
# Is equivalent to:
relig_income %>% pivot_longer(
cols = !religion,
names_to = "income",
values_to = "count"
)
#> # A tibble: 180 × 3
#> religion income count
#> <chr> <chr> <dbl>
#> 1 Agnostic <$10k 27
#> 2 Agnostic $10-20k 34
#> 3 Agnostic $20-30k 60
#> 4 Agnostic $30-40k 81
#> 5 Agnostic $40-50k 76
#> 6 Agnostic $50-75k 137
#> 7 Agnostic $75-100k 122
#> 8 Agnostic $100-150k 109
#> 9 Agnostic >150k 84
#> 10 Agnostic Don't know/refused 96
#> # … with 170 more rows
相关用法
- R tidyr pivot_longer 将数据从宽转为长
- R tidyr pivot_wider_spec 使用规范将数据从长轴转向宽轴
- R tidyr pivot_wider 将数据从长轴转向宽轴
- R tidyr pack 打包和拆包
- R tidyr separate_rows 将折叠的列分成多行
- R tidyr extract 使用正则表达式组将字符列提取为多列
- R tidyr chop 砍伐和砍伐
- R tidyr unnest_longer 将列表列取消嵌套到行中
- R tidyr uncount “计数” DataFrame
- R tidyr cms_patient_experience 来自医疗保险和医疗补助服务中心的数据
- R tidyr replace_na 将 NA 替换为指定值
- R tidyr unnest_wider 将列表列取消嵌套到列中
- R tidyr full_seq 在向量中创建完整的值序列
- R tidyr nest 将行嵌套到 DataFrame 的列表列中
- R tidyr separate 使用正则表达式或数字位置将字符列分成多列
- R tidyr nest_legacy Nest() 和 unnest() 的旧版本
- R tidyr separate_longer_delim 将字符串拆分为行
- R tidyr gather 将列收集到键值对中
- R tidyr hoist 将值提升到列表列之外
- R tidyr separate_wider_delim 将字符串拆分为列
- R tidyr drop_na 删除包含缺失值的行
- R tidyr fill 用上一个或下一个值填充缺失值
- R tidyr tidyr_legacy 旧名称修复
- R tidyr complete 完成缺少数据组合的 DataFrame
- R tidyr expand 扩展 DataFrame 以包含所有可能的值组合
注:本文由纯净天空筛选整理自Hadley Wickham等大神的英文原创作品 Pivot data from wide to long using a spec。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。