Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/visual-studio-2012/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 - Fatal编程技术网

R 从一列中生成两个组

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列生成两个组,例如一个组是xxxxx 4xx,另一个组可以是xxxxx 9xx,我的数据集如下:

我想分成两组,这样我就可以比较他们了

这是我的数据的标题:

       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