Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/83.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/wix/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_Dataframe - Fatal编程技术网

R 从数据框中分离列

R 从数据框中分离列,r,dataframe,R,Dataframe,我有一个数据框,它是从文本文件中提取数据的结果,文本文件中的某些列包含的值超过一个值 我想将超过一个值的列拆分为两列,如下所示 我尝试了这段代码,但它产生了一个错误 db<-separate_rows(db,TYPE,CHRO,EX ,sep=",\\s+") Error: All nested columns must have the same number of elements. db注意样本数据和预期输出不匹配;例如,示例数据中没有CHRO=c700条目。您似乎也缺少行。请检查

我有一个数据框,它是从文本文件中提取数据的结果,文本文件中的某些列包含的值超过一个值

我想将超过一个值的列拆分为两列,如下所示

我尝试了这段代码,但它产生了一个错误

db<-separate_rows(db,TYPE,CHRO,EX ,sep=",\\s+")
Error: All nested columns must have the same number of elements.

db注意样本数据和预期输出不匹配;例如,示例数据中没有
CHRO=c700
条目。您似乎也缺少行。请检查您的输入/预期输出数据。

您可以使用
tidyr::单独的行
,例如

df %>%
    separate_rows(TYPE, sep = ",") %>%
    separate_rows(CHRO, sep = ",") %>%
    separate_rows(EX, sep = ",")
#    TYPE       CHRO     EX
#1       multiple   c.211dup   <NA>
#2       multiple  c.3751dup   <NA>
#3       multiple       <NA> exon.2
#4       multiple       <NA> exon.3
#5       multiple       <NA> exon.7
#6   mitocondrial       <NA> exon.3
#7   mitocondrial       <NA> exon.7
#8 multifactorial       <NA>   <NA>
请注意,结果是不同的,因为分离列的顺序很重要


样本数据
df嗨!您能否提供数据样本的
dput(db)
,以便我们测试解决方案?此外,如果一列存在多个值,其他列是否也存在这些值?例如,
TYPE
在第3行有2个值,
EX
也有2个值。一个有多个值,而另一个没有?那么,当发生这种情况时,你认为正确的结果是什么?在这里,您为第一行复制其他值,但随后按第3行中的顺序匹配这些值。如果在一行中,一列有2个值,而另一列有3个值,该怎么办?如果OP对
类型
EX
的可选产品集没有问题,这就是答案。
library(splitstackshape)
df %>%
    cSplit(names(df), direction = "long") %>%
    fill(TYPE) %>%
    group_by_at(names(df)) %>%
    slice(1)
#  TYPE           CHRO      EX
#  <fct>          <fct>     <fct>
#1 mitocondrial   NA        exon.7
#2 multifactorial NA        NA
#3 multiple       c.211dup  NA
#4 multiple       c.3751dup NA
#5 multiple       NA        exon.2
#6 multiple       NA        exon.3
#7 multiple       NA        NA
df <- read.table(text =
    "TYPE                   CHRO                       EX
        multiple    'c.211dup, c.3751dup'                       NA
        multiple                     NA                   exon.2
        multiple,mitocondrial        NA                   exon.3,exon.7
  multifactorial                     NA                       NA", header = T)