Ваши предложения о том, как управлять данными в R - PullRequest
0 голосов
/ 15 января 2019

У меня есть фрейм данных 58207 x 6. Он получается в результате различной комбинации значений. Используя tidyverse, я сгруппировал по первому столбцу и использовал do (), чтобы присвоить каждому уникальному значению 1-го столбца конкретный кадр данных из столбца 3–6. Однако я не могу понять, как сделать то же самое для столбца 2 с той разницей, что я нужны только уникальные значения, хранящиеся в списке, а не повторы.

Вот заголовок фрейма данных.

# A tibble: 58,207 x 6
   id       pfam   go_id   name                nmspace     linkage_type
   <chr>    <fct>  <fct>   <fct>                <fct>           <fct>
 1 O00273_~ PF020~ GO:000~ cytoplasm            cellular_compo~ IEA
 2 O00273_~ PF020~ GO:000~ cytosol              cellular_compo~ IDA
 3 O00273_~ PF020~ GO:000~ plasma membrane      cellular_compo~ IDA
 4 O00273_~ PF020~ GO:000~ nuclear chromatin    cellular_compo~ IDA
 5 O00273_~ PF020~ GO:000~ apoptotic process    biological_pro~ IEA
 6 O00273_~ PF020~ GO:000~ protein binding      molecular_func~ IPI

Буду признателен за любые предложения о том, как получить значение level () для каждого group_by (id) во втором столбце и сохранить его в списке, соответствующем id.

И я новичок в этом. Если у вас есть предложения по обработке таких данных, пожалуйста, дайте мне знать. По сути, я надеюсь сделать сравнение между разными идентификаторами после.

1 Ответ

0 голосов
/ 15 января 2019

У вас все в порядке?

# dummy data, using data.table package, converting from tibble
library(data.table)
library(tibble)
library(gtools)
df <- tibble(id = rep(c("id1", "id2", "id3"), each=3),
             X1 = c("a", "f", "b",
                    "b", "a", "e",
                    "a", "f", "f"))
dt <- as.data.table(df)
dt[]

# retaining data structure
out1 <- dt[, .(unique.X1 = unique(X1)), by = id]
out1[]
# as a list
out2 <- dt[, .(unique.X1 = list(unique(X1))), by = id]
out2[]

# back to original format
out2.df <- as.tibble(out2)
out2.df

# EDIT: getting unique combinations
ids <- unique(df$id)
lookup <- as.data.table(gtools::combinations(length(ids), 2))
lookup[, V1 := ids[lookup$V1]][, V2 := ids[lookup$V2]]
setnames(lookup, c("V1", "V2"), c("ID1", "ID2"))
lookup[, index := .I]
setkey(dt, id)
joined <- lookup[, .(intersect = list(intersect(dt[J(ID1), X1], dt[J(ID2), X1]))), by=index]
out <- merge(joined, lookup, by="index")
out[, index := NULL]
out[]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...