这是 tidyr pivot_wider()
泛型的方法。它被翻译为data.table::dcast()
用法
# S3 method for dtplyr_step
pivot_wider(
data,
id_cols = NULL,
names_from = name,
names_prefix = "",
names_sep = "_",
names_glue = NULL,
names_sort = FALSE,
names_repair = "check_unique",
values_from = value,
values_fill = NULL,
values_fn = NULL,
...
)
参数
- data
-
一个
lazy_dt()
。 - id_cols
-
<
tidy-select
> 唯一标识每个观察值的一组列。通常在有冗余变量(即其值与现有变量完全相关的变量)时使用。默认为
data
中的所有列,但通过names_from
和values_from
指定的列除外。如果提供 tidyselect 表达式,则在删除通过names_from
和values_from
指定的列后,将在data
上对其求值。 - names_from, values_from
-
<
tidy-select
> 一对参数,说明从哪一列(或多列)获取输出列的名称 (names_from
),以及从哪一列(或多列)获取单元格值 (values_from
)。如果
values_from
包含多个值,该值将被添加到输出列的前面。 - names_prefix
-
添加到每个变量名称开头的字符串。如果
names_from
是数值向量并且您想要创建语法变量名称,这尤其有用。 - names_sep
-
如果
names_from
或values_from
包含多个变量,这将用于将它们的值连接到单个字符串中以用作列名称。 - names_glue
-
您可以提供使用
names_from
列(和特殊的.value
)来创建自定义列名称的粘合规范,而不是names_sep
和names_prefix
。 - names_sort
-
列名应该排序吗?如果是
FALSE
(默认值),则列名称按首次出现排序。 - names_repair
-
如果输出具有无效的列名称,会发生什么情况?默认情况下,如果列重复,
"check_unique"
将出错。使用"minimal"
允许输出中存在重复项,或使用"unique"
通过添加数字后缀来消除重复项。有关更多选项,请参阅vctrs::vec_as_names()
。 - values_fill
-
(可选)一个(标量)值,指定每个
value
在缺失时应填充的内容。如果您想将不同的填充值应用于不同的值列,这可以是命名列表。
- values_fn
-
一个函数,默认为
length()
。请注意,这与tidyr::pivot_wider()
的行为不同,tidyr::pivot_wider()
默认返回列表列。 - ...
-
传递给方法的附加参数。
例子
library(tidyr)
fish_encounters_dt <- lazy_dt(fish_encounters)
fish_encounters_dt
#> Source: local data table [114 x 3]
#> Call: `_DT30`
#>
#> fish station seen
#> <fct> <fct> <int>
#> 1 4842 Release 1
#> 2 4842 I80_1 1
#> 3 4842 Lisbon 1
#> 4 4842 Rstr 1
#> 5 4842 Base_TD 1
#> 6 4842 BCE 1
#> # … with 108 more rows
#>
#> # Use as.data.table()/as.data.frame()/as_tibble() to access results
fish_encounters_dt %>%
pivot_wider(names_from = station, values_from = seen)
#> Source: local data table [19 x 12]
#> Call: dcast(`_DT30`, formula = fish ~ station, value.var = "seen")
#>
#> fish Release I80_1 Lisbon Rstr Base_TD BCE BCW BCE2 BCW2 MAE
#> <fct> <int> <int> <int> <int> <int> <int> <int> <int> <int> <int>
#> 1 4842 1 1 1 1 1 1 1 1 1 1
#> 2 4843 1 1 1 1 1 1 1 1 1 1
#> 3 4844 1 1 1 1 1 1 1 1 1 1
#> 4 4845 1 1 1 1 1 NA NA NA NA NA
#> 5 4847 1 1 1 NA NA NA NA NA NA NA
#> 6 4848 1 1 1 1 NA NA NA NA NA NA
#> # … with 13 more rows, and 1 more variable: MAW <int>
#>
#> # Use as.data.table()/as.data.frame()/as_tibble() to access results
# Fill in missing values
fish_encounters_dt %>%
pivot_wider(names_from = station, values_from = seen, values_fill = 0)
#> Source: local data table [19 x 12]
#> Call: dcast(`_DT30`, formula = fish ~ station, value.var = "seen",
#> fill = 0)
#>
#> fish Release I80_1 Lisbon Rstr Base_TD BCE BCW BCE2 BCW2 MAE
#> <fct> <int> <int> <int> <int> <int> <int> <int> <int> <int> <int>
#> 1 4842 1 1 1 1 1 1 1 1 1 1
#> 2 4843 1 1 1 1 1 1 1 1 1 1
#> 3 4844 1 1 1 1 1 1 1 1 1 1
#> 4 4845 1 1 1 1 1 0 0 0 0 0
#> 5 4847 1 1 1 0 0 0 0 0 0 0
#> 6 4848 1 1 1 1 0 0 0 0 0 0
#> # … with 13 more rows, and 1 more variable: MAW <int>
#>
#> # Use as.data.table()/as.data.frame()/as_tibble() to access results
# Generate column names from multiple variables
us_rent_income_dt <- lazy_dt(us_rent_income)
us_rent_income_dt
#> Source: local data table [104 x 5]
#> Call: `_DT31`
#>
#> GEOID NAME variable estimate moe
#> <chr> <chr> <chr> <dbl> <dbl>
#> 1 01 Alabama income 24476 136
#> 2 01 Alabama rent 747 3
#> 3 02 Alaska income 32940 508
#> 4 02 Alaska rent 1200 13
#> 5 04 Arizona income 27517 148
#> 6 04 Arizona rent 972 4
#> # … with 98 more rows
#>
#> # Use as.data.table()/as.data.frame()/as_tibble() to access results
us_rent_income_dt %>%
pivot_wider(names_from = variable, values_from = c(estimate, moe))
#> Source: local data table [52 x 6]
#> Call: dcast(`_DT31`, formula = GEOID + NAME ~ variable, value.var = c("estimate",
#> "moe"))
#>
#> GEOID NAME estimate_income estimate_rent moe_income moe_rent
#> <chr> <chr> <dbl> <dbl> <dbl> <dbl>
#> 1 01 Alabama 24476 747 136 3
#> 2 02 Alaska 32940 1200 508 13
#> 3 04 Arizona 27517 972 148 4
#> 4 05 Arkansas 23789 709 165 5
#> 5 06 California 29454 1358 109 3
#> 6 08 Colorado 32401 1125 109 5
#> # … with 46 more rows
#>
#> # Use as.data.table()/as.data.frame()/as_tibble() to access results
# When there are multiple `names_from` or `values_from`, you can use
# use `names_sep` or `names_glue` to control the output variable names
us_rent_income_dt %>%
pivot_wider(
names_from = variable,
names_sep = ".",
values_from = c(estimate, moe)
)
#> Source: local data table [52 x 6]
#> Call: dcast(`_DT31`, formula = GEOID + NAME ~ variable, value.var = c("estimate",
#> "moe"), sep = ".")
#>
#> GEOID NAME estimate.income estimate.rent moe.income moe.rent
#> <chr> <chr> <dbl> <dbl> <dbl> <dbl>
#> 1 01 Alabama 24476 747 136 3
#> 2 02 Alaska 32940 1200 508 13
#> 3 04 Arizona 27517 972 148 4
#> 4 05 Arkansas 23789 709 165 5
#> 5 06 California 29454 1358 109 3
#> 6 08 Colorado 32401 1125 109 5
#> # … with 46 more rows
#>
#> # Use as.data.table()/as.data.frame()/as_tibble() to access results
# Can perform aggregation with values_fn
warpbreaks_dt <- lazy_dt(as_tibble(warpbreaks[c("wool", "tension", "breaks")]))
warpbreaks_dt
#> Source: local data table [54 x 3]
#> Call: `_DT32`
#>
#> wool tension breaks
#> <fct> <fct> <dbl>
#> 1 A L 26
#> 2 A L 30
#> 3 A L 54
#> 4 A L 25
#> 5 A L 70
#> 6 A L 52
#> # … with 48 more rows
#>
#> # Use as.data.table()/as.data.frame()/as_tibble() to access results
warpbreaks_dt %>%
pivot_wider(
names_from = wool,
values_from = breaks,
values_fn = mean
)
#> Source: local data table [3 x 3]
#> Call: dcast(`_DT32`, formula = tension ~ wool, value.var = "breaks",
#> fun.aggregate = function (x, ...)
#> UseMethod("mean"))
#>
#> tension A B
#> <fct> <dbl> <dbl>
#> 1 L 44.6 28.2
#> 2 M 24 28.8
#> 3 H 24.6 18.8
#>
#> # Use as.data.table()/as.data.frame()/as_tibble() to access results
相关用法
- R dtplyr lazy_dt 创建一个“惰性”data.table 以与 dplyr 动词一起使用
- R dtplyr group_modify.dtplyr_step 对每个组应用一个函数
- R dtplyr transmute.dtplyr_step 创建新列,删除旧列
- R dtplyr slice.dtplyr_step 使用行的位置对行进行子集化
- R dtplyr left_join.dtplyr_step 连接数据表
- R dtplyr fill.dtplyr_step 用上一个或下一个值填充缺失值
- R dtplyr filter.dtplyr_step 使用列值对行进行子集化
- R dtplyr mutate.dtplyr_step 创建和修改列
- R dtplyr distinct.dtplyr_step 子集不同/唯一行
- R dtplyr unite.dtplyr_step 通过将字符串粘贴在一起将多列合并为一列。
- R dtplyr nest.dtplyr_step 巢
- R dtplyr relocate.dtplyr_step 使用变量名称重新定位变量
- R dtplyr head.dtplyr_step 对第一行或最后一行进行子集化
- R dtplyr expand.dtplyr_step 扩展 DataFrame 以包含所有可能的值组合。
- R dtplyr group_by.dtplyr_step 分组和取消分组
- R dtplyr intersect.dtplyr_step 设置操作
- R dtplyr summarise.dtplyr_step 将每组汇总为一行
- R dtplyr count.dtplyr_step 按组计数观察值
- R dtplyr select.dtplyr_step 使用名称对列进行子集化
- R dtplyr drop_na.dtplyr_step 删除包含缺失值的行
- R dtplyr complete.dtplyr_step 完成缺少数据组合的 DataFrame
- R dtplyr collect.dtplyr_step 强制计算惰性 data.table
- R dtplyr arrange.dtplyr_step 按列值排列行
- R dtplyr separate.dtplyr_step 使用正则表达式或数字位置将字符列分成多列
- R dtplyr rename.dtplyr_step 使用名称重命名列
注:本文由纯净天空筛选整理自Hadley Wickham等大神的英文原创作品 Pivot data from long to wide。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。