【发布时间】:2017-11-20 11:27:02
【问题描述】:
例如,我有一个如下所示的数据框:
df = data.frame(x=c('a, b, c','b, c', 'd, e'))
理想情况下,我最终会得到一个如下所示的数据框:
df.transformed = data.frame(x.a = c(1,0,0),
x.b = c(1,1,0),
x.c = c(1,1,0),
x.d = c(0,0,1),
x.e = c(0,0,1))
x 中每个可能的逗号分隔值已被分隔。
我已经为这个问题编写了很多次手动解决方案,但这是我在调查数据中遇到的足够多的时间,这让我想知道为什么它不包含在像 tidyr 这样的包中,因为 separate该软件包中的功能似乎不太有用。我希望在加载必要的包后能够在一行中完成此操作。
【问题讨论】:
-
试试
qdapTools::mtabulate(strsplit(as.character(df$x), ",\\s*"))或tidyverserownames_to_column(df, 'rn') %>% separate_rows(x) %>% mutate(i = 1) %>% spread(x, i, fill = 0) -
如果需要重命名,用
%>% select(-rn) %>% rename_all(funs(paste0("x", .)))链接
标签: r data-cleaning