R 从一列中生成两个组
我想从gene_id列生成两个组,例如一个组是xxxxx 4xx,另一个组可以是xxxxx 9xx,我的数据集如下: 我想分成两组,这样我就可以比较他们了 这是我的数据的标题:R 从一列中生成两个组,r,R,我想从gene_id列生成两个组,例如一个组是xxxxx 4xx,另一个组可以是xxxxx 9xx,我的数据集如下: 我想分成两组,这样我就可以比较他们了 这是我的数据的标题: gene_id expr <fct> <int> 1 ENSG00000000005 6 2 ENSG00000000419 754 3 ENSG00000000457 447 4 ENSG0
gene_id expr
<fct> <int>
1 ENSG00000000005 6
2 ENSG00000000419 754
3 ENSG00000000457 447
4 ENSG00000000460 426
5 ENSG00000000938 5
6 ENSG00000000971 1
您可以尝试从右侧提取第三个数字,然后构建一个变量以按组进行差异:
#Data
df <- read.csv('https://raw.githubusercontent.com/learnseq/learning/main/RNASeq_post-processing%20(1).csv',stringsAsFactors = F,header = F)
#Extract
df$V1 <- trimws(df$V1)
df$Var <- substr(df$V1,nchar(df$V1)-2,nchar(df$V1)-2)
#Create groups
df$Group <- ifelse(df$Var==4,'Group4',ifelse(df$Var==9,'Group9','Other'))
此外:
下面的代码是什么
> split(df,with(df,gsub(".*(\\d)\\d{2}$","\\1",gene_id)))
$`0`
gene_id expr
1 ENSG00000000005 6
$`4`
gene_id expr
2 ENSG00000000419 754
3 ENSG00000000457 447
4 ENSG00000000460 426
$`9`
gene_id expr
5 ENSG00000000938 5
6 ENSG00000000971 1
资料
一种简单的方法是使用str_sub将第一列中的值子集并定义组的名称。正如您将看到的,每个值都将放入具有相同子集名称的组中 代码如下:
# load environment
library(stringr)
# load data
data_url = 'https://raw.githubusercontent.com/learnseq/learning/main/RNASeq_post-processing%20(1).csv'
df = read.csv(data_url, header = FALSE, stringsAsFactors = FALSE)
# define groups
df$group = as.numeric(str_sub(df$V1, -3, -3))
# print results
head(df)
以下是输出:
V1 V2 group
1 ENSG00000000003 1138 0
2 ENSG00000000005 6 0
3 ENSG00000000419 754 4
4 ENSG00000000457 447 4
5 ENSG00000000460 426 4
6 ENSG00000000938 5 9
让我们知道它是否解决了您的问题。带有组分割的选项
-输出
#[[1]]
# A tibble: 3 x 2
# gene_id expr
# <chr> <int>
#1 ENSG00000000419 754
#2 ENSG00000000457 447
#3 ENSG00000000460 426
#[[2]]
# A tibble: 1 x 2
# gene_id expr
# <chr> <int>
#1 ENSG00000000005 6
#[[3]]
# A tibble: 2 x 2
# gene_id expr
# <chr> <int>
#1 ENSG00000000938 5
#2 ENSG00000000971 1
# gene_id expr grp
#1 ENSG00000000005 6 xxxxx5XX
#2 ENSG00000000419 754 xxxxx4XX
#3 ENSG00000000457 447 xxxxx4XX
#4 ENSG00000000460 426 xxxxx4XX
#5 ENSG00000000938 5 xxxxx9XX
#6 ENSG00000000971 1 xxxxx9XX
-输出
#[[1]]
# A tibble: 3 x 2
# gene_id expr
# <chr> <int>
#1 ENSG00000000419 754
#2 ENSG00000000457 447
#3 ENSG00000000460 426
#[[2]]
# A tibble: 1 x 2
# gene_id expr
# <chr> <int>
#1 ENSG00000000005 6
#[[3]]
# A tibble: 2 x 2
# gene_id expr
# <chr> <int>
#1 ENSG00000000938 5
#2 ENSG00000000971 1
# gene_id expr grp
#1 ENSG00000000005 6 xxxxx5XX
#2 ENSG00000000419 754 xxxxx4XX
#3 ENSG00000000457 447 xxxxx4XX
#4 ENSG00000000460 426 xxxxx4XX
#5 ENSG00000000938 5 xxxxx9XX
#6 ENSG00000000971 1 xxxxx9XX
@你的鸭子看起来也很棒!你的比我的更复杂:试试下面这个层运行我的代码:df%>%filterGroup!='其他'>%ggplotaesx=Group,y=V2,fill=Group+geom\u boxplot+facet\u wrap.~Group,scales='free'@user432797您可以删除facet选项,也可以先加载tidyverse!让我知道进展如何!请使用我的代码尝试此操作,确保df0c%filterstr_detectGroup、c'Group4'、'Group9',然后是ggplotdf0c、aesx=Group、y=V2+geom_boxplot@user432797您还必须知道,另一个主题在其代码中所做的是创建一个列表,这可能就是代码草图不起作用的原因。我所做的是将数据保存在数据框中,以便在ggplot2中轻松使用。我希望这对你有用。让我知道进展如何@user432797可能某些字符串正在转换为其他格式!
#[[1]]
# A tibble: 3 x 2
# gene_id expr
# <chr> <int>
#1 ENSG00000000419 754
#2 ENSG00000000457 447
#3 ENSG00000000460 426
#[[2]]
# A tibble: 1 x 2
# gene_id expr
# <chr> <int>
#1 ENSG00000000005 6
#[[3]]
# A tibble: 2 x 2
# gene_id expr
# <chr> <int>
#1 ENSG00000000938 5
#2 ENSG00000000971 1
library(stringr)
df %>%
mutate(grp = str_replace(gene_id, '^\\D+0*([1-9]).*', 'xxxxx\\1XX'))
# gene_id expr grp
#1 ENSG00000000005 6 xxxxx5XX
#2 ENSG00000000419 754 xxxxx4XX
#3 ENSG00000000457 447 xxxxx4XX
#4 ENSG00000000460 426 xxxxx4XX
#5 ENSG00000000938 5 xxxxx9XX
#6 ENSG00000000971 1 xxxxx9XX