- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我想用 pivot_longer()
来自 {tidyr} 与 names_pattern
将我的数据转换为长格式 而 保留列名中模式匹配之一的前缀字符串。
这似乎违反直觉,但我想在应用数据字典清理步骤之前转换为长格式,这需要原始列名。
设置
library(dplyr)
library(tidyr)
d <- tibble(id = 1,
other_var = "foo",
suffix_t1_value1 = "a",
suffix_t1_value2 = "b",
suffix_t2_value1 = "c",
suffix_t2_value2 = "d")
我所做的
> pivot_longer(d,
starts_with("suffix"),
names_pattern = "suffix_t(1|2)_(.*)",
names_to = c("rep", ".value"))
# A tibble: 2 x 5
id other_var rep value1 value2
<dbl> <chr> <chr> <chr> <chr>
1 1 foo 1 a b
2 1 foo 2 c d
期望输出
# A tibble: 2 x 5
id other_var rep suffix_t1_value1 suffix_t1_value2
<dbl> <chr> <chr> <chr> <chr>
1 1 foo 1 a b
2 1 foo 2 c d
我试过的
> pivot_longer(d,
starts_with("suffix"),
names_pattern = "suffix_t(1|2)_(.*)",
names_to = c("rep", "suffix_t1_{.value}"))
尝试 2
> pivot_longer(d,
starts_with("suffix"),
names_pattern = "suffix_t(1|2)_(.*)",
names_to = c("rep", paste0("suffix_t1_", ".value")))
最佳答案
我假设您想在 pivot_longer
中一步完成。 .我还没有弄清楚,如果可能的话,但如果两步过程没问题,那么下面的方法应该可行:
library(dplyr)
library(tidyr)
d %>% pivot_longer(starts_with("suffix"),
names_pattern = "suffix_t(1|2)_(.*)",
names_to = c("rep", ".value")
) %>%
rename_with(~ gsub("(.*)", "suffix_t1_\\1", .x),
starts_with("value"))
#> # A tibble: 2 x 5
#> id other_var rep suffix_t1_value1 suffix_t1_value2
#> <dbl> <chr> <chr> <chr> <chr>
#> 1 1 foo 1 a b
#> 2 1 foo 2 c d
创建于 2021-06-09 由
reprex package (v0.3.0)
pivot_longer
有点,我不认为可以访问
.value
内
paste
以及粘合语法
{.value}
好像不支持。
build_longer_spec
进行旋转的构建块。这允许我们创建自己的
my_pivot_longer
我们可以在其中包含
names_fn
的函数将一个函数应用于新列名的参数,在这里我们可以使用
gsub
添加前缀或后缀。
my_pivot_longer <- function(data,
cols,
names_to = "name",
names_pattern = NULL,
names_fn = NULL) {
spec <- build_longer_spec(data,
cols,
names_pattern = names_pattern,
names_to = names_to)
if (!is.null(names_fn)) {
fn <- rlang::as_function(names_fn)
spec$.value <- fn(spec$.value)
}
pivot_longer_spec(data, spec)
}
d %>%
my_pivot_longer(starts_with("suffix"),
names_pattern = "suffix_t(1|2)_(.*)",
names_to = c("rep", ".value"),
names_fn = ~ gsub("(.*)", "suffix_t1_\\1", .x))
#> Note: Using an external vector in selections is ambiguous.
#> ℹ Use `all_of(cols)` instead of `cols` to silence this message.
#> ℹ See <https://tidyselect.r-lib.org/reference/faq-external-vector.html>.
#> This message is displayed once per session.
#> # A tibble: 2 x 5
#> id other_var rep suffix_t1_value1 suffix_t1_value2
#> <dbl> <chr> <chr> <chr> <chr>
#> 1 1 foo 1 a b
#> 2 1 foo 2 c d
创建于 2021-06-09 由
reprex package (v0.3.0)
关于r - 使用 `.value` 和 `pivot_longer()` 时如何将后缀附加到 `names_pattern`,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67899327/
我正在处理一个包含 528 列和 2,643,246 行的数据框。其中八个是字符变量,其余是整数。总共有 11.35 GiB 的数据,我的可用 RAM 为 164 GiB。 我现在想在所述数据框上运行
我再次努力使用 pivot_longer 将宽 df 转换为长 df 数据框是针对不同效果大小和样本大小进行功效分析的结果,这就是原始 df 的样子: es_issue_owner es_inde
我有一个关于 tidyr::pivot_longer() 的问题。 假设我从一个假想的数据框开始。想象一下,人们被问到关于两个流派的两个问题。 SQ1_2 将是关于第一种类型的第二个问题。 set.s
这个问题在这里已经有了答案: How to use Pivot_longer to reshape from wide-type data to long-type data with multip
我正在使用 tidyr 中的 pivot_longer 将数据帧从宽转换为长。我希望使用所有列并在列中维护行名。较早的melt 函数在此调用中完美运行 w1 % pivot_longer() Erro
我有以下数据框: library(tidyverse) dat % group_by(Scenario) %>% mutate_at(vars(-group_cols()), .funs =
我有一个如下所示的数据集。 # A tibble: 1 x 4 hhm1q001 hhm2q001 hhm1q002 hhm2q002 1 blue re
我有一些看起来很乱的数据,其中多列有多个逗号分隔值: df % select(-ends_with("dur")) %>% pivot_longer(cols = ends_with("aoi
尝试使用 pivot_longer。我不知道如何使用“names_sep”或“names_pattern”来解决这个问题。 dat % mutate(limit=ifelse(limit==
这个问题在这里已经有了答案: How to use Pivot_longer to reshape from wide-type data to long-type data with multip
这个问题在这里已经有了答案: How to use Pivot_longer to reshape from wide-type data to long-type data with multip
我需要将数据框转换为更长的格式。例如,我的数据框会像 df %tidyr::pivot_longer(c("x1","x2","y1","y2"),
我有一个具有这些名称的数据框: df % select(!pooled) %>% mutate(se=!is.na(se)) # A tibble: 14 x 7 state count
上下文 我想将df(宽格式)更改为df_expected(长格式)但失败了。 我知道我需要使用 pivot_longer,但是我需要转换多个列。 > df # A tibble: 2 × 5
这个问题在这里已经有了答案: How to reshape Panel / Longitudinal survey data from wide to long format using pivot
我想知道为什么我的 pivot_longer()下面的调用返回 value 下的嵌套输出柱子? foo % mutate(x = rnorm(n(), mx, 1), y =
我有一个 df 的形式: df 1 1 02 0 1 2 1 03 1 2 3 1 04 0 3 4
我正在尝试使用 R 中的 pivot_longer() 转换表格。但分隔不是通过任何常见符号(例如“_”或“.”)进行的。而是列名称的结尾方式(“B”或“T”)。我尝试使用正则表达式,但不太成功。 下
我有一个带有一系列成对列的“宽”data.frame。我的目标是使用pivot_longer 取消旋转它。 对于所有列中带有前缀的成对列有很多帮助。但在我的情况下,只有一半的对有前缀,我不知道如何定义
简单的 pivot_longer 问题。鉴于: library(tidyverse) df 10 4 2 exit_date 1
我是一名优秀的程序员,十分优秀!