使用tidydata导入.csv文件

时间:2019-08-26 09:03:33

标签: r tidy

以从.csv文件到tidydata的方式导入数据时遇到困难。

我的数据集由描述性数据(年龄,国家/地区等)组成,然后由15个条件列组成,而我只希望在一列中包含这些条件列(长格式)。我以前曾尝试过几种方法来“融合”数据,但是并没有达到我的预期目的。这些是我尝试过的几件事,我知道这有点混乱。数据中有很多NA,这似乎引起了问题。我正在尝试创建此特定的列“ Vignette”,它将用作长格式的15个小插图列的集合列。

head(dat)
    ID       Frequency Gender Country Continent         Age
1 5129615189 At least weekly female  France    Europe 30-50 years
2 5128877943  At least daily female   Spain    Europe  > 50 years
3 5126775994 At least weekly female   Spain    Europe 30-50 years
4 5126598863  At least daily   male Albania    Europe 30-50 years
5 5124909744  At least daily female Ireland    Europe  > 50 years
6 5122047758 At least weekly female Denmark    Europe 30-50 years
                       Practice             Specialty  Seniority AMS
1 University public hospital centre   Infectious diseases 6-10 years Yes
2             Other public hospital   Infectious diseases > 10 years Yes
3 University public hospital centre        Intensive care > 10 years Yes
4 University public hospital centre   Infectious diseases > 10 years  No
5            Private hospial/clinic Clinical microbiology > 10 years Yes
6 University public hospital centre   Infectious diseases  0-5 years Yes
   Durations V01 V02 V03 V04 V05 V06 V07 V08 V09 V10 V11 V12 V13 V14 V15
1          range   7   2   7   7   7   5   7  14   7  42  42  90   7  NA   5
2          range   7  10  10   5  14   5   7  14  10  42  21  42  14  14  14
3          range   7   5   5   7  14   5   5  13  10  42  42  42   5   0   7
4          range  10   7   7   5   7  10   7   5   7  28  14  42  10  10   7
5          range   7   5   7   7  14   7   7  14  10  42  42  90  10   0   7
6 fixed duration   7   3   3   7  10  10   7  14   7  90  90  90  10   7   7

 dat_long %>% 
  gather(Days, Age, -Vignette)

dat$new_sp = NULL
 names(dat) <- gsub("new_sp", "", names(dat))

dat_tidy<-melt(
 data=dat,
 id=0:180,
 variable.name="Vignette",
 value.name="Days",
 na.rm=TRUE
 )

 dat_tidy<- mutate(dat_tidy,
              Days= sub("^V", "", Days)
              )

它总是说“错误:在数据中找不到id变量:NA” 我试图摆脱NA的问题,但它似乎无能为力。

1 个答案:

答案 0 :(得分:0)

我猜您正在从melt加载reshape2函数。我建议您尝试使用tidyr,它基本上是reshape2的下一代。

您的错误可能是参数id=0:180。基本上,这是要求其将0-180列保留为“标识符”列,并融合其余部分(即为每列中的每个值创建一个新行)。

当子集的索引多于data.frame中的列时,不存在的列将用纯NA填充-您要它们,所以就得到它们!

我建议加载tidyr,因为它较新。程序包中应该有一些更直观的新动词,但我将为您提供具有较旧语义的解决方案:

library(tidyr)
dat_tidy <- dat %>% gather('Vignette', 'Days', starts_with('V'))
# or a bit more verbose
dat_tidy <- dat %>% gather('Vignette', 'Days', V01, V02, V03, V04)

并查看@ heck1的评论以提出更好的问题。