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)