在R-ODK清理中分离不整洁的数据
要整理数据集的一部分,我需要将一列分隔为若干列。这些数据的形式与此类似:在R-ODK清理中分离不整洁的数据,r,tidy,odk,R,Tidy,Odk,要整理数据集的一部分,我需要将一列分隔为若干列。这些数据的形式与此类似: set.seed(2133) df <- data.frame(a = paste(sample(1:9, 5, replace=T), sample(c("", "%2", "%3"), 5, replace=T), sample(c("", "%3", "%4"), 5, replace=T), sep="")) df a 1 6 2 2%3%4 3 6%2 4 3%2 5 5%2
set.seed(2133)
df <- data.frame(a = paste(sample(1:9, 5, replace=T), sample(c("", "%2", "%3"), 5, replace=T), sample(c("", "%3", "%4"), 5, replace=T), sep=""))
df
a
1 6
2 2%3%4
3 6%2
4 3%2
5 5%2%4
set.seed(2133)
df我们可以使用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
或者,我们可以在拆分后使用qdapTools
中的方便函数mtabulate
library(qdapTools)
mtabulate(strsplit(as.character(df$a), "[%]"))
我喜欢基本版本。不错的选择。出于兴趣-不整洁的数据是否直接来自表单?首先,您从ODK(聚合的哪一部分?)获取数据到R的过程是什么?我这样问是因为你的问题可能在于这一途径,而不是数据。@Florian,是的,通过使用聚合。不幸的是,我们无法做出如此深远的改变。
table(transform(stack(setNames(strsplit(as.character(df$a), "[%]"),
1:nrow(df))), values = factor(values, levels= 1:6))[2:1])
library(qdapTools)
mtabulate(strsplit(as.character(df$a), "[%]"))