如何在 R 中的向量中有条件地添加 NA 值?

Eva*_*Eva 5 r stringr

假设我的数据是df <- c("Author1","Reference1","Abstract1","Author2","Reference2","Abstract2","Author3","Reference3","Author4","Reference4","Abstract4").

这是一个系列,顺序为作者、参考文献和摘要。但在某些情况下,摘要数据会丢失。(在此示例中,缺少第三个摘要。)那么,当摘要丢失时,如何添加 NA 值来代替摘要呢?

换句话说,如果向量中的一个元素以单词“Reference”开头,但其下一个元素不以单词“Abstract”开头,我想在以“Reference”开头的元素后面添加一个 NA 值。结果向量应该是 result <- c("Author1","Reference1","Abstract1","Author2","Reference2","Abstract2","Author3","Reference3",NA,"Author4","Reference4","Abstract4") How can I do it?

我已经尝试过 R 中的追加函数,但是为了使用它,我需要有要添加 NA 的元素的索引号。因此,每个 NA 元素都需要手动输入。

Tar*_*Jae 2

一种方法(也是我完成这些事情的唯一方法)是用小标题或数据框来思考:(所以这不是最好的方法)!

  1. 我们创建一个一列的小标题x,调用
  2. 然后我们按数字分组,例如 1,1,1,parse_number()函数来自readr(I love parse_number()),
  3. summarise(cur_data()[seq(3),])参阅将每个组扩展到最大行数,请参阅此处将每个组扩展到最大 n 行 3a 在此停止,如果需要 NA,则拉出,否则继续
  4. 最后我们使用具有r回收能力的paste并拉出向量:

1. 如果需要 NA:

library(dplyr)
library(readr)

my_vector <- tibble(x = c("Author1","Reference1","Abstract1","Author2","Reference2",
        "Abstract2","Author3","Reference3","Author4","Reference4","Abstract4")) %>% 
  group_by(group= parse_number(x)) %>% 
  summarise(cur_data()[seq(3),]) %>% 
  pull(x)

[1] "Author1"    "Reference1" "Abstract1"  "Author2"    "Reference2" "Abstract2"  "Author3"   
 [8] "Reference3" NA           "Author4"    "Reference4" "Abstract4"
Run Code Online (Sandbox Code Playgroud)

2. 如果需要缺少的单词:

library(dplyr)
library(readr)
my_vector <- tibble(x = c("Author1","Reference1","Abstract1","Author2","Reference2",
        "Abstract2","Author3","Reference3","Author4","Reference4","Abstract4")) %>% 
  group_by(group= parse_number(x)) %>% 
  summarise(cur_data()[seq(3),]) %>% 
  mutate(group = paste0(c("Author", "Reference", "Abstract"), group)) %>% 
  pull(group)
Run Code Online (Sandbox Code Playgroud)
 [1] "Author1"    "Reference1" "Abstract1"  "Author2"    "Reference2" "Abstract2"  "Author3"   
 [8] "Reference3" "Abstract3"  "Author4"    "Reference4" "Abstract4" 
Run Code Online (Sandbox Code Playgroud)