我有一个小标题,每行有一个单词列表。我想从一个搜索关键字的函数中创建一个新变量,如果找到该关键字,则创建一个由关键字正负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中存在解决方案,那将是理想的选择,但是任何解决方案都将有所帮助。任何帮助,将不胜感激。
需要:从宽到长旋转,堆叠相应列的组。
本质上,我有 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) 我有一个看起来像这样的数据集:
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()在处理列中的分组时:
在我的实际数据集中,有 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)