Как объединить значения в один столбец, чтобы создать новый столбец - PullRequest
0 голосов
/ 10 октября 2019

У меня есть фрейм данных со многими повторяющимися значениями в определенных столбцах. Я хотел бы создать новые столбцы с новым значением для каждой уникальной записи в интересующем столбце. Я огляделся по вопросам, связанным с агрегацией, по переполнению стека и не совсем нашел то, что искал. Вывод

dput (head (пример)) ниже.

structure(list(avecor = c(-0.929199786400515, -0.729228501795928, 
-0.431983639087243, -0.55088842103792, -0.978422379116014, -0.627856061946295
), miR = structure(c(9L, 5L, 6L, 2L, 8L, 4L), .Label = c("hsa-miR-107", 
"hsa-miR-193a-3p", "hsa-miR-28-5p", "hsa-miR-331-3p", "hsa-miR-362-3p", 
"hsa-miR-362-5p", "hsa-miR-429", "hsa-miR-590-5p", "hsa-miR-630"
), class = "factor"), mRNA = structure(c(1L, 2L, 2L, 3L, 3L, 
4L), .Label = c("IGF1R", "PRKCA", "TESK2", "THBS1", "TLN2", "VAV3"
), class = "factor")), row.names = c("hsa-miR-630:IGF1R", "hsa-miR-362-3p:PRKCA", 
"hsa-miR-362-5p:PRKCA", "hsa-miR-193a-3p:TESK2", "hsa-miR-590-5p:TESK2", 
"hsa-miR-331-3p:THBS1"), class = "data.frame")
                          avecor             miR  mRNA
hsa-miR-630:IGF1R     -0.9291998     hsa-miR-630 IGF1R
hsa-miR-362-3p:PRKCA  -0.7292285  hsa-miR-362-3p PRKCA
hsa-miR-362-5p:PRKCA  -0.4319836  hsa-miR-362-5p PRKCA
hsa-miR-193a-3p:TESK2 -0.5508884 hsa-miR-193a-3p TESK2
hsa-miR-590-5p:TESK2  -0.9784224  hsa-miR-590-5p TESK2
hsa-miR-331-3p:THBS1  -0.6278561  hsa-miR-331-3p THBS1
hsa-miR-28-5p:TLN2    -0.9988643   hsa-miR-28-5p  TLN2
hsa-miR-331-3p:TLN2   -0.8773624  hsa-miR-331-3p  TLN2
hsa-miR-429:TLN2      -0.9901250     hsa-miR-429  TLN2
hsa-miR-107:VAV3      -0.7713383     hsa-miR-107  VAV3

При применении к столбцу mRNA идеальный вывод будет:

                          avecor             miR  mRNA UniquemRNA
hsa-miR-630:IGF1R     -0.9291998     hsa-miR-630 IGF1R 1 
hsa-miR-362-3p:PRKCA  -0.7292285  hsa-miR-362-3p PRKCA 2
hsa-miR-362-5p:PRKCA  -0.4319836  hsa-miR-362-5p PRKCA 2
hsa-miR-193a-3p:TESK2 -0.5508884 hsa-miR-193a-3p TESK2 3
hsa-miR-590-5p:TESK2  -0.9784224  hsa-miR-590-5p TESK2 3
hsa-miR-331-3p:THBS1  -0.6278561  hsa-miR-331-3p THBS1 4
hsa-miR-28-5p:TLN2    -0.9988643   hsa-miR-28-5p  TLN2 5
hsa-miR-331-3p:TLN2   -0.8773624  hsa-miR-331-3p  TLN2 5
hsa-miR-429:TLN2      -0.9901250     hsa-miR-429  TLN2 5
hsa-miR-107:VAV3      -0.7713383     hsa-miR-107  VAV3 6

Любая помощь будет наиболее ценной.

Ответы [ 2 ]

1 голос
/ 10 октября 2019

Я использую базовый пакет R.

 df<-structure(list(avecor = c(-0.929199786400515, -0.729228501795928, 
    -0.431983639087243, -0.55088842103792, -0.978422379116014, -0.627856061946295
    ), miR = structure(c(9L, 5L, 6L, 2L, 8L, 4L), .Label = c("hsa-miR-107", 
    "hsa-miR-193a-3p", "hsa-miR-28-5p", "hsa-miR-331-3p", "hsa-miR-362-3p", 
    "hsa-miR-362-5p", "hsa-miR-429", "hsa-miR-590-5p", "hsa-miR-630"
    ), class = "factor"), mRNA = structure(c(1L, 2L, 2L, 3L, 3L, 
    4L), .Label = c("IGF1R", "PRKCA", "TESK2", "THBS1", "TLN2", "VAV3"
    ), class = "factor")), row.names = c("hsa-miR-630:IGF1R", "hsa-miR-362-3p:PRKCA", 
    "hsa-miR-362-5p:PRKCA", "hsa-miR-193a-3p:TESK2", "hsa-miR-590-5p:TESK2", 
    "hsa-miR-331-3p:THBS1"), class = "data.frame")



 UniquemRNA<-c()
    for (i in 1:length(table(df$mRNA))){
      fre <- rep(i, table(df$mRNA)[[i]])
        UniquemRNA<-c(UniquemRNA,fre)
    }
    UniquemRNA
df$UniquemRNA<-UniquemRNA
df
1 голос
/ 10 октября 2019

Если я вас правильно понял, вы уже создали этот столбец, создав mRNA как factor. Если это действительно то, что вы хотите, вы можете просто перекодировать factor в numeric значения. Но это просто копирует информацию, которая уже есть. Вот как вы могли бы сделать это:

library(dplyr)
#> 
#> Attaching package: 'dplyr'
#> The following objects are masked from 'package:stats':
#> 
#>     filter, lag
#> The following objects are masked from 'package:base':
#> 
#>     intersect, setdiff, setequal, union
structure(list(avecor = c(-0.929199786400515, -0.729228501795928, 
                          -0.431983639087243, -0.55088842103792, -0.978422379116014, -0.627856061946295
), miR = structure(c(9L, 5L, 6L, 2L, 8L, 4L), .Label = c("hsa-miR-107", 
                                                         "hsa-miR-193a-3p", "hsa-miR-28-5p", "hsa-miR-331-3p", "hsa-miR-362-3p", 
                                                         "hsa-miR-362-5p", "hsa-miR-429", "hsa-miR-590-5p", "hsa-miR-630"
), class = "factor"), mRNA = structure(c(1L, 2L, 2L, 3L, 3L, 
                                         4L), .Label = c("IGF1R", "PRKCA", "TESK2", "THBS1", "TLN2", "VAV3"
                                         ), class = "factor")), row.names = c("hsa-miR-630:IGF1R", "hsa-miR-362-3p:PRKCA", 
                                                                              "hsa-miR-362-5p:PRKCA", "hsa-miR-193a-3p:TESK2", "hsa-miR-590-5p:TESK2", 
                                                                              "hsa-miR-331-3p:THBS1"), class = "data.frame") %>% 
mutate(UniquemRNA = as.numeric(mRNA))
#>       avecor             miR  mRNA UniquemRNA
#> 1 -0.9291998     hsa-miR-630 IGF1R          1
#> 2 -0.7292285  hsa-miR-362-3p PRKCA          2
#> 3 -0.4319836  hsa-miR-362-5p PRKCA          2
#> 4 -0.5508884 hsa-miR-193a-3p TESK2          3
#> 5 -0.9784224  hsa-miR-590-5p TESK2          3
#> 6 -0.6278561  hsa-miR-331-3p THBS1          4
...