r将数据字符串拆分为多列,按单个变量排序
我有一个关于清理混乱数据的简单问题。我有一个通过电子邮件发送给我的数据集,它包含多个列,每个列都包含一个逗号分隔的数字字符串。传统上,这些数字中的每一个都应该是它自己的变量,但这些数据集不是这样给我的。以下是一些数据的示例:r将数据字符串拆分为多列,按单个变量排序,r,tidyr,R,Tidyr,我有一个关于清理混乱数据的简单问题。我有一个通过电子邮件发送给我的数据集,它包含多个列,每个列都包含一个逗号分隔的数字字符串。传统上,这些数字中的每一个都应该是它自己的变量,但这些数据集不是这样给我的。以下是一些数据的示例: indication treatment 1,2 3 2 2,1 1,3 2,3 请想象一下,这些数据集包含近100个这样的列和数千行,每个列中包含不同数量的变量。我的目标是像这样导入一个数据集,然后拆分每一列,使字
indication treatment
1,2 3
2 2,1
1,3 2,3
请想象一下,这些数据集包含近100个这样的列和数千行,每个列中包含不同数量的变量。我的目标是像这样导入一个数据集,然后拆分每一列,使字符串中的每个变量都位于自己的列中,但拆分每一列的方式是将每个唯一变量排序到自己的列中。像这样:
indication_1 indication_2 indication_3 treatment_1 treatment_2 treatment_3
1 1 0 0 0 1
0 1 0 1 1 0
1 0 1 0 1 1
请注意,列标题已更改,数值列为二进制0或1,其中1表示变量的存在
我遇到了一些问题,因为我一直尝试的拆分函数要求我知道需要多少列,然后在拆分后不将变量排序到它们自己的列中。它变得相当复杂,需要我为每个包含字符串的列编写单独的代码
我喜欢一个函数,它可以获取包含字符串的列,将数据拆分为单独的排序列,将这些列设置为二进制“是”或“否”,然后更改列名以指示原始列名和该列中的变量。我希望这适用于任何数据列,因此我不必重写或修改单个列的函数(假设所有列都是带字符标题的数字字符串)
提前谢谢 我们可以做一个
strsplit
,然后用mtabulate
获得频率
library(qdapTools)
do.call(cbind, lapply(df, function(x) mtabulate(strsplit(x, ","))))
# indication.1 indication.2 indication.3 treatment.1 treatment.2 treatment.3
#1 1 1 0 0 0 1
#2 0 1 0 1 1 0
#3 1 0 1 0 1 1
这里的答案可能会有帮助@Konrad
strsplit
需要一个字符
类来拆分。您有factor
类,因为默认情况下data.frame
有stringsAsFactors=FALSE
只需使用mtabulate(strsplit(as.character(x),“,”))
Konrad,我只需将我的数据框更改为矩阵,这使所有列都是数字,它工作得非常好。