/**/

我收到一个EXCEL文件,如下所示:

structure(list(`Variable Name` = c("form.hhConsent", NA, NA, 
"form.hhReasonRefused", NA, NA, NA, "form.childrenRepeat.childrenGroup.childSex", 
NA, NA, "form.childrenRepeat.childrenGroup.dobSourceWho", NA, 
NA, NA, NA, "form.hohSex", NA, NA, "form.mothersRepeat.mothersGroup.spouseSex", 
NA, NA, "form.childrenRepeat.childrenGroup.treatmentConsent", 
NA, NA, NA, NA, "form.childrenRepeat.childrenGroup.noTreatReason", 
NA, NA, NA), Type = c(NA, "1", "0", NA, "1", "2", "99", NA, "1", 
"2", NA, "1", "2", "3", "99", NA, "1", "2", NA, "1", "2", NA, 
"1", "0", "2", "3", NA, "1", "2", "99"), Meaning = c(NA, "Yes", 
"No", NA, "No responsible could be found", "They don't want to", 
"Other reason", NA, "Male", "Female", NA, "Mother", "Father", 
"Neighbor", "Others", NA, "Male", "Female", NA, "Male", "Female", 
NA, "Yes", "No", "AMR grappe", "M54 grappe", NA, "allergy", "parent refusal", 
"other"), Missing_values = c(NA, NA, NA, NA, NA, NA, NA, NA, 
NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 
NA, NA, NA, NA, NA, NA), Format_values = c(NA, NA, NA, NA, NA, 
NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 
NA, NA, NA, NA, NA, NA, NA, NA, NA)), row.names = c(NA, -30L), class = "data.frame")

当前文件如下所示:

variable name   type      meaning
X1
                xxx         xxx
                xxx         xxx     
X2
                xxx.        xxx
                xxx         xxx
                xxx         xxx
x3
                xxx         xxx 

我想将其转换为常规数据集,如下所示:

variable name   type   meaning
x1               xxx.   xxx
x1               xxx.   xxx
x2               xxx    xxx
x2               xxx.   xxx
x2               xxx.   xxx
x3               xxx.   xxx

我的 idea 是:首先按"变量名"分组,然后补上缺失的变量名,最后一步是过滤掉类型和含义列中没有任何值的标题行.但这并不管用.问题是不存在可以为GROUP_BY的变量.

有没有人能帮我想一想怎么才能做到这一点?非常感谢~~!

r

推荐答案

我们使用fill(从tidyr开始)用前面的非NA替换变量名中的NA元素,然后用select替换前三列,并使用if_all替换filter,以仅保留‘Type’、‘Meantion’列中所有非NA元素的行

library(dplyr)
library(tidyr)
df1 %>% 
  fill(`Variable Name`) %>%
  select(1:3) %>% 
  filter(if_all(Type:Meaning, complete.cases))

-输出

# A tibble: 22 × 3
   `Variable Name`                                Type  Meaning                      
   <chr>                                          <chr> <chr>                        
 1 form.hhConsent                                 1     Yes                          
 2 form.hhConsent                                 0     No                           
 3 form.hhReasonRefused                           1     No responsible could be found
 4 form.hhReasonRefused                           2     They don't want to           
 5 form.hhReasonRefused                           99    Other reason                 
 6 form.childrenRepeat.childrenGroup.childSex     1     Male                         
 7 form.childrenRepeat.childrenGroup.childSex     2     Female                       
 8 form.childrenRepeat.childrenGroup.dobSourceWho 1     Mother                       
 9 form.childrenRepeat.childrenGroup.dobSourceWho 2     Father                       
10 form.childrenRepeat.childrenGroup.dobSourceWho 3     Neighbor                     
# … with 12 more rows

编辑:基于@Leon Samson的 comments

R相关问答推荐

有没有更好的 R 方法来通过行上的函数扩展数据框?

检测一个向量是否至少有一个非 NA 元素的最快方法是什么? (即,与 `base::anyNA()` 相反)

为什么我的图中省略了负值的幂?

R 中的组欠采样以解决分层数据中的类和特征不平衡问题

pair() 如何给不同的标签赋予不同的字体样式?

正则表达式在字母之间添加逗号

Geom_label_repel:如何将标签拉向散点图的 4 个角

ggpattern - 指定变量值的模式

如何找到具有相同值但以相反顺序删除其中之一的两行?在 R 中

如何为列的子集创建具有平均差异的列?

使用 gsub 删除数字字符前后的所有元素

R 子集数据框,其中没有观察到某些变量

如何删除图表中出现的文字?

为什么 ggplot2 中的 facet_wrap() 可以用波浪号 (~) 或 vars() 表示?

删除一些 x_scales

如何修改 gtsummary 表中的变量标签

根据 R 中列表中的存在情况将列添加到数据框中

如何将数据框转换为组合矩阵

多个数据框的行名交集