Извините, если это повторяющийся вопрос, но я даже не совсем уверен, какие ключевые слова использовать для поиска этой проблемы.
У меня есть список генов и список типов клеток, в которых они находятся. Я хочу создать таблицу сетевого взаимодействия, чтобы показать взаимодействия между типами ячеек, в которых они выражены, предпочтительно с использованием Cytoscape, который я пытался проработать в течение последнего дня или около того, но сейчас я просто пытаюсь переформатировать свои данные, и для этого мне нужно разделить типы ячеек на два столбца.
Ниже приведен пример моих текущих данных для одного гена, который относится к 4 типам ячеек, но, очевидно, у меня есть несколько тысяч генов в полной таблице, каждый из которых может быть только в одном типе ячеек или нескольких (не всегда 4)
GENENAME CellType
CRYM Epithelial
CRYM Tubule
CRYM Cardiomyocyte
CRYM Glandular
Я хочу переформатировать приведенные выше данные, чтобы показать связи между типами ячеек, то есть переформатировать во что-то вроде этого:
GENENAME CellType1 CellType2
CRYM Epithelial Tubule
CRYM Epithelial Cardiomyocyte
CRYM Epithelial Glandular
CRYM Tubule Cardiomyocyte
CRYM Tubule Glandular
CRYM Cardiomyocyte Glandular
В каком столбце окажется каждый из типов ячеек, не имеет значения для дальнейшего анализа, но было бы хорошо избегать обратных дубликатов. Однако я не могу понять, как переформатировать данные таким образом. Может ли кто-нибудь помочь?
Я считаю, что тогда я смогу загрузить данные в этом формате с двумя столбцами в Cytoscape, чтобы создать сетевой анализ и удалить ссылки с очень низким количеством генов.





Не самое элегантное решение, но я иду
По сути, первым шагом является фильтрация шага для каждого GENENAME, после чего я создаю цикл для сбора всех CellType2 и продолжаю их добавлять.
library(dplyr)
CellType <- c("Epithelial","Tubule","Cardiomyocyte","Glandular","Epithelial","Tubule","Cardiomyocyte","Glandular" )
GENENAME <- c("CRYM","CRYM","CRYM","CRYM","ABC","ABC","ABC","ABC")
df = data.frame(GENENAME=GENENAME,CellType=CellType)
df_full = c()
for (i in unique(df$GENENAME)){
df_temp = filter(df,GENENAME==i)
all_match = c()
for (k in 1:nrow(df_temp)){
anchor = df_temp[k,"CellType"] # This is the CellType1
pair = df_temp[k:nrow(df_temp),"CellType"] # Find all the CellType2
match = expand.grid(anchor,pair) #Create all combination
all_match = rbind(all_match,match) #Append result
}
all_match = cbind(i,all_match) # Add the GENENAME information
df_full = rbind(df_full,all_match)
}
result = filter(df_full,Var1!=Var2) #Remove case when CellType1 == CellType2
print(result)
i Var1 Var2
1 CRYM Epithelial Tubule
2 CRYM Epithelial Cardiomyocyte
3 CRYM Epithelial Glandular
4 CRYM Tubule Cardiomyocyte
5 CRYM Tubule Glandular
6 CRYM Cardiomyocyte Glandular
7 ABC Epithelial Tubule
8 ABC Epithelial Cardiomyocyte
9 ABC Epithelial Glandular
10 ABC Tubule Cardiomyocyte
11 ABC Tubule Glandular
12 ABC Cardiomyocyte Glandular
Да, это работает, хотя для запуска требуется некоторое время, учитывая, что это такой большой набор данных, спасибо.