我有一个关于清理杂乱数据的简单问题。我有一个通过电子邮件发送给我的数据集,其中包含多列,每列包含一个逗号分隔的数字字符串。传统上,这些数字中的每一个都应该是它自己的变量,但这不是这些数据集提供给我的方式。以下是一些数据的示例:

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 表示存在变量。

我遇到了问题,因为我一直在尝试的拆分函数要求我知道我需要多少列,然后在拆分后不要将变量排序到它们自己的列中。它变得非常复杂,需要我为包含字符串的每个单独列编写单独的代码。

Id 就像一个函数,它可以采用包含字符串的列,将数据拆分为单独的排序列,使这些列成为二进制是或否,然后更改列名以指示原始列名和该列中的变量。我希望这适用于任何数据列,因此我不必重写或修改单个列的函数(假设所有列都是带有字符标题的数字字符串)。

提前致谢。

最佳答案

我们可以做一个 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

关于r 将一串数据拆分成多列,按各个变量排序,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/47515850/

10-12 17:36
查看更多