以从.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的问题,但它似乎无能为力。
答案 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的评论以提出更好的问题。