广泛的假人到长的因素与行的扩展

时间:2016-12-12 19:28:43

标签: r

存在许多资源,用于将数据从宽到长转换,反之亦然。这里有一点点扭曲,但如果我错过了任何现有的答案,请告诉我。

扭曲是我有一些由多个标志(虚拟变量)指示的行。我不仅需要从宽到长,而且要同时复制具有多个标志的行。此外,虽然还有其他杂项数据,但没有唯一的ID,因此没有" timevar"或" idvar"。

示例:

CaseDetail.CaseId
Case_Id
PtaCase.CaseDetails
ds <- data.frame(other_data=c(1,2,3),flag_a = c(1,0,0), flag_b=c(0,1,0), flag_c=c(1,0,1))
ds

3 个答案:

答案 0 :(得分:3)

你可以使用tidyverse重塑,过滤和转换

library(tidyverse)
gather(ds, flag, present, flag_a:flag_c) %>% 
  filter(present>0) %>% 
  separate(flag, c("pre","flag")) %>% 
  select(-present, -pre)

导致......

#   other_data flag
# 1          1    a
# 2          2    b
# 3          1    c
# 4          3    c

答案 1 :(得分:1)

除非我误解了您的需求,否则您可以使用dplyrtidyr::gather执行此操作:

library(dplyr)
library(tidyr)
res <- ds %>% gather("flag","value",-1) %>% 
              filter(value != 0) %>% 
              mutate(flag=sub("flag_","",flag)) %>% 
              select(-value)
##  other_data flag
##1          1    a
##2          2    b
##3          1    c
##4          3    c

我们gather除第一列以外的所有列(即other_data)。我们首先filter仅保留value != 0的行,然后使用flagsub中提取标记名称。最后,我们删除了value列。

答案 2 :(得分:0)

这是获取输出的<input type="range" min="0" max="100"> 选项

base R