R 按列分组并在数据框中添加多行[重复]

问题描述 投票:0回答:1

我有一个包含主题 ID 和两个变量列的数据框。我的 subjectid 从 100 到 1000,一些主题 ID 缺少 var1 列中的值,我想将它们添加回列中。 var1 列的值包括 a、b、c、d、e 和 f。

subject var1    var2
subj100 a   FALSE
subj100 b   FALSE
subj100 c   FALSE
subj100 d   FALSE
subj200 a   FALSE
subj200 b   FALSE
subj200 c   FALSE
subj200 d   FALSE
subj200 e   FALSE
subj200 f   FALSE
subj300 c   FALSE
subj300 d   FALSE
subj300 e   FALSE

所需输出:

subject var1    var2
subj100 a   FALSE
subj100 b   FALSE
subj100 c   FALSE
subj100 d   FALSE
subj100 e   FALSE
subj100 f   FALSE
subj200 a   FALSE
subj200 b   FALSE
subj200 c   FALSE
subj200 d   FALSE
subj200 e   FALSE
subj200 f   FALSE
subj300 a   FALSE
subj300 b   FALSE
subj300 c   FALSE
subj300 d   FALSE
subj300 e   FALSE
subj300 f   FALSE

我尝试:

var1_content <- c('a','b','c','d','e','f')

df <- data.frame(subject=  c('subj100','subj100','subj100','subj100','subj200','subj200',
       'subj200','subj200','subj200','subj200','subj300','subj300','subj300'),
       var1 = c( 'a','b','c','d','a','b','c','d','e','f','c','d','e'),
       var2 = c( 'FALSE','FALSE','FALSE','FALSE','FALSE','FALSE','FALSE',
                 'FALSE','FALSE','FALSE','FALSE','FALSE','FALSE'))

df %>%
  group_by(subject) %>% 
  mutate(var1 = ifelse(all(var1 %in% var1_content), var1, var1_content))

但这不是我所期望的像上面期望的输出。请指教,谢谢。

r dictionary dplyr mutate do.call
1个回答
0
投票

你可以这样做:

library(tidyverse)

df %>%
  group_by(subject) %>%
  complete(var1 = !!var1_content, fill = list(var2 = FALSE)) %>%
  ungroup()
© www.soinside.com 2019 - 2024. All rights reserved.