在R - ODK清理中分离不整齐的数据

时间:2016-04-08 11:52:40

标签: r tidy odk

为了整理数据集的一部分,我需要将一列分成几列。这些数据采用与此类似的形式:

df$One <- ifelse(grepl("1", df$a) == T, 1, 0)
df$Two <- ifelse(grepl("2", df$a) == T, 1, 0)
          a One Two
1     6   0   0
2 2%3%4   0   1
3   6%2   0   1
4   3%2   0   1
5 5%2%4   0   1

Tidyr的独立功能不会完成这项工作,我所拥有的最好的想法是一系列ifelse陈述,如下所示:

{{1}}

这种整理的最佳方式是什么?我相信很多人使用Open Data Kit(ODK)进行数据收集都会遇到这种情况。

1 个答案:

答案 0 :(得分:2)

我们可以使用sapply循环模式(即1,2),获取逻辑矩阵,通过包裹+强制转换为二进制并将其指定为'df'中的新列

df[c("One", "Two")] <- +(sapply(1:2, grepl, df$a))
df
#     a One Two
#1     6   0   0
#2 2%3%4   0   1
#3   6%2   0   1
#4   3%2   0   1
#5 5%2%4   0   1

如果要获取'a'列中每个唯一值的二进制输出,我们可以用分隔符(%)将字符串拆分为'a',输出list可以是通过指定data.framestack transform,factor“值”列转换为levels,将table转换为table(transform(stack(setNames(strsplit(as.character(df$a), "[%]"), 1:nrow(df))), values = factor(values, levels= 1:6))[2:1]) >

mtabulate

或者我们可以在分割后使用来自qdapTools的便捷函数library(qdapTools) mtabulate(strsplit(as.character(df$a), "[%]"))

{{1}}