R语言中怎样将数据框中的一列分成多列

Python019

R语言中怎样将数据框中的一列分成多列,第1张

1.创建数据

a <- data.frame("geneid1"=rep("TabHLH1",3),"geneid2"=c("TabHLH2.1","TabHLH2.2","TabHLH2.3"),"geneid3"=rep("TabHLH3",3))

结果如下:

 geneid1   geneid2 geneid3

1 TabHLH1 TabHLH2.1 TabHLH3

2 TabHLH1 TabHLH2.2 TabHLH3

3 TabHLH1 TabHLH2.3 TabHLH3

加载函数

library(dplyr)

library(tidyr)

将第二列以“.”分列

b <- a %>% separate(geneid2, c("gene","id"), "[.]")

结果如下

  geneid1     gene        id   geneid3

1 TabHLH1  TabHLH2  1  TabHLH3

2 TabHLH1  TabHLH2  2  TabHLH3

3 TabHLH1  TabHLH2  3  TabHLH3

R中根据匹配原则将一列拆分为几列的方法

例如我们需要将一下数据的第二列从and处拆分为两列:

before = data.frame(attr = c(1,30,4,6), type=c('foo_and_bar','foo_and_bar_2'))

attr          type

1    1  foo_and_bar

2  30 foo_and_bar_2

3    4  foo_and_bar

4    6 foo_and_bar_2

==>

  attr type_1 type_2

1    1    foo    bar

2  30    foo  bar_2

3    4    foo    bar

4    6    foo  bar_2

1. 使用stringr包的str_split_fixed函数

library(stringr)

str_split_fixed(before$type, "_and_", 2)

2. 使用do.call函数 (do.call(what, args, quote = FALSE, envir = parent.frame()))

before <- data.frame(attr = c(1,30,4,6), type=c('foo_and_bar','foo_and_bar_2')) 

out <- strsplit(as.character(before$type),'_and_')

do.call(rbind, out)

3. 使用tidyr包

library(dplyr)

library(tidyr)

before <- data.frame(attr = c(1, 30 ,4 ,6 ), type = c('foo_and_bar', 'foo_and_bar_2'))

before %>% separate(type, c("foo", "bar"), "_and_")

4. 使用sapply 以及 "["

before$type_1 <sapply(strsplit(as.character(before$type),'_and_'), "[", 1)

before$type_2 <sapply(strsplit(as.character(before$type),'_and_'), "[", 2)

或者

before <- data.frame(attr = c(1,30,4,6), type=c('foo_and_bar','foo_and_bar_2'))

after <- with(before, data.frame(attr = attr))

after <- cbind(after, data.frame(t(sapply(out, `[`))))names(after)[2:3] <- paste("type", 1:2, sep = "_")

5. 使用unlist后重新划分矩阵

before <- data.frame(attr = c(1,30,4,6), type=c('foo_and_bar','foo_and_bar_2'))

tmp <- matrix(unlist(strsplit(as.character(before$type), '_and_')), ncol=2,byrow=TRUE) #you should show how many columns you would get after spliting

after <- cbind(before$attr, as.data.frame(tmp))names(after) <- c("attr", "type_1", "type_2")

标签: R

怎么用R语言把表格CSV文件中的数据变成一列,并且行名为原列名呢,

1,csv文件,可以用fread函数读取,命名,为dd

2,数据变为一列,如果没有ID这一列,全部都是性状,可以这样运行:melt(dd),达到的效果如下: