我正在尝试清除一些错误输入的数据。变量的问题允许从五个选择中选择多个答案,编号为1到5。已按照以下方式输入数据(这只是一个示例-实际数据中有更多的变量和更多的观察结果框架):
data
V1
1 1, 2, 3
2 1, 2, 4
3 2, 3, 4, 5
4 1, 3, 4
5 1, 3, 5
6 2, 3, 4, 5
这是一些代码来重新创建示例数据:
data = data.frame(V1 = c("1, 2, 3", "1, 2, 4", "2, 3, 4, 5",
"1, 3, 4", "1, 3, 5", "2, 3, 4, 5"))
我真正需要的是要被更多地对待的数据...二进制数据-就像一组“是/否”问题一样-进入了一个看起来像这样的数据帧:
data
V1.1 V1.2 V1.3 V1.4 V1.5
1 1 1 1 NA NA
2 1 1 NA 1 NA
3 NA 1 1 1 1
4 1 NA 1 1 NA
5 1 NA 1 NA 1
6 NA 1 1 1 1
目前,实际的变量名称无关紧要,我可以轻松地解决它。同样,丢失的元素是“O”,“NA”还是空格也没有太大关系,同样,我以后可以修复此问题。
我已经尝试过使用
transform
包中的reshape
函数以及strsplit
来填充其他内容,但是我却无法做自己想要的事情。我也查看了关于Stackoverflow的许多其他相关问题,但它们似乎并不是一个完全相同的问题。
最佳答案
您只需要编写一个函数并使用apply
即可。首先是一些伪数据:
##Make sure you're not using factors
dd = data.frame(V1 = c("1, 2, 3", "1, 2, 4", "2, 3, 4, 5",
"1, 3, 4", "1, 3, 5", "2, 3, 4, 5"),
stringsAsFactors=FALSE)
接下来,创建一个接受一行并根据需要进行转换的函数
make_row = function(i, ncol=5) {
##Could make the default NA if needed
m = numeric(ncol)
v = as.numeric(strsplit(i, ",")[[1]])
m[v] = 1
return(m)
}
然后使用
apply
并转置结果t(apply(dd, 1, make_row))
关于r - 拆分一列用逗号分隔的数据,并将输出重新编码为因数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10100887/