小编wsc*_*ell的帖子

超前或滞后函数可获取多个值,而不仅仅是第n个

我有一个小标题,每行有一个单词列表。我想从一个搜索关键字的函数中创建一个新变量,如果找到该关键字,则创建一个由关键字正负3个单词组成的字符串。

下面的代码是close,但是不是抓住我的关键字之前和之后的所有三个单词,而是抓住单词3前后的单词。

df <- tibble(words = c("it", "was", "the", "best", "of", "times", 
                       "it", "was", "the", "worst", "of", "times"))
df <- df %>% mutate(chunks = ifelse(words=="times", 
                                    paste(lag(words, 3), 
                                          words, 
                                          lead(words, 3), sep = " "),
                                    NA))
Run Code Online (Sandbox Code Playgroud)

最直观的解决方案是该lag函数可以执行以下操作:lead(words, 1:3)但这不起作用。

显然,我可以手动(paste(lead(words,3), lead(words,2), lead(words,1),...lag(words,3))很快完成此操作,但实际上,我最终将希望能够抓住50个单词左右的关键字,以至于无法手工编码。

如果tidyverse中存在解决方案,那将是理想的选择,但是任何解决方案都将有所帮助。任何帮助,将不胜感激。

r lag lead dplyr

10
推荐指数
1
解决办法
492
查看次数

pivot_longer 组合列组:高级透视

需要:从宽到长旋转,堆叠相应列的组。
本质上,我有 3 组 5 列,需要将每个相应的列堆叠为 1(即,3 组中每组中的第一个变量变为 1 列,每组中的第二个变量是第 2 列, 等等)。例如,我需要:第 2、7 和 12 列都在 1 列中,第 3、8 和 13 列在下一列中,...... 6、11 和 16 列都在 1 列中。

数据结构:我有一个类似于这样的数据集:

df <- tibble(
  pid = c(1, 2, 3, 4),
  
  v1_1 = c(19, NA, NA, NA),
  v1_2 = c(12, NA, NA, NA),
  v2_1 = c(15, NA, NA, NA),
  v2_2 = c(19, NA, NA, NA),
  v1_entry_3 = c(11, NA, NA, NA),
  
  v1_1_1 = c(NA, NA, 36, NA),
  v1_2_1 = …
Run Code Online (Sandbox Code Playgroud)

pivot r dplyr

2
推荐指数
2
解决办法
88
查看次数

带有列组的 pivot_longer

我有一个看起来像这样的数据集:

df_start <- tribble(
    ~name,   ~age, ~x1_sn_ctrl1, ~x1_listing2_2, ~x1_affect1, ~x2_sn_ctrl1, ~x1_listing2_2, ~x2_affect1, ~number,
    "John",   28,        1,            1,             9,           4,            5,                9,       6,
    "Paul",   27,        2,            1,             4,           1,            3,                3,       4,
    "Ringo",  31,        3,            1,             2,           2,            5,                8,       9)
Run Code Online (Sandbox Code Playgroud)

我需要pivot_longer()在处理列中的分组时:

  • 有 2 个 x 值(1 和 2)
  • 每个 x 值有 3 个问题(sn_ctrl1、listing2_2、effect1)

在我的实际数据集中,有 14 个 x。

本质上,我想做的是应用pivot_longer()到 x 值,但留下我的 3 个问题(sn_ctrl1、listing2_2、effect1)。

我想结束的是这样的:

df_end <- tribble(
    ~name, ~age, ~xval, ~sn_ctrl1, ~listing2_2, ~affect1, ~number,
    "John", 28,    1, …
Run Code Online (Sandbox Code Playgroud)

r dplyr

1
推荐指数
1
解决办法
589
查看次数

标签 统计

dplyr ×3

r ×3

lag ×1

lead ×1

pivot ×1