Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/fortran/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
r将数据字符串拆分为多列,按单个变量排序_R_Tidyr - Fatal编程技术网

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,我只需将我的数据框更改为矩阵,这使所有列都是数字,它工作得非常好。