通过替换 R 中的单元格来复制行

Copy rows by replacing cells in R

我对R很陌生,让我解释一下这个问题。我有以下 data.frame:

df1<-data.frame(name = c("Ann", "Beth", "Jon", "Mark"),
test1 = c(1,3,2,3),
test2 = c("B",NA,"C",NA)
)

简单来说就是四个人。其中两个只参加了 test1 并获得了该测试的结果。另外两人参加了两项考试。我希望将此 data.frame 转换为以下内容:

df2<-data.frame(name = c("Ann", "Ann", "Beth", "Jon", "Jon", "Mark"),
test1 = c(1,"B",3,2,"C",3)
)

换句话说,我希望所有的测试结果都在一栏中。顺序并不重要,例如,“second Ann”可以在最后一行而不是在第二行。由于 Ann 和 Jon 进行了两次测试,我 (i) 为他们创建了一个额外的行,(ii) 将他们的 test2 结果复制到 test1,并且 (iii) 删除了 test2 列。

我的尝试。我首先在 test2:

中复制了具有非空值的行
df1 <- bind_rows(df1, 
              df1 %>%
                filter_at(vars(starts_with("test2")), all_vars(!is.na(.))))

现在我想不通如何将新行中的 test2 结果传输到 test1。

这个有用吗:

df1 %>% mutate(test1 = as.character(test1)) %>% pivot_longer(!name, names_to = 'test') %>% select(-2) %>% na.omit()
# A tibble: 6 x 2
  name  value
  <chr> <chr>
1 Ann   1    
2 Ann   B    
3 Beth  3    
4 Jon   2    
5 Jon   C    
6 Mark  3