2017-12-05 3 views
1

Ich habe einen sehr großen Datenrahmen (nrow = ~ 273.000), die ich als Beispiel unten habe: Jede Zeile ist ein Proteinname (s) und hat verschiedene Anzahlen von Spalten, die die subzellulären Strukturen auflisten, in denen sie in menschlichen Zellen vorkommen. 1) Ich möchte doppelte Einträge für jede Zeile entfernen und habe damit zu kämpfen (Code unten). 2) Ich möchte dann zählen können, in wie vielen Spalten (subzelluläre Strukturen) jedes Gen gefunden werden kann.Behalten Sie nur eindeutige/distinct Spalten für jede Zeile einer Eingabetabelle

Hintergrund: Ich habe diese Daten von Uniprot und bereinigt es so gut wie ich konnte mit Regex aber dort einige Fälle sind noch dort, wo es Zeilen mit doppelten Einträgen (zB FMR1 Listen Chromosome 2x, 3x Zytoplasma und Plasmamembran 2x - darüber hinaus gibt es einige leere Spalten in zwischen ihnen) nur eindeutige Spalten

dput(df1) 
structure(list(FMR1 = structure(c(41L, 3L, 17L, 63L, 16L, 24L, 
35L, 33L, 52L, 6L, 49L, 5L, 71L, 72L, 42L, 58L, 22L, 20L, 19L, 
80L, 9L, 51L, 66L, 64L, 23L, 14L, 60L, 45L, 28L, 54L, 7L, 30L, 
29L, 44L, 53L, 8L, 69L, 79L, 10L, 11L, 26L, 37L, 39L, 40L, 82L, 
73L, 18L, 21L, 27L, 47L, 4L, 46L, 1L, 13L, 36L, 70L, 74L, 67L, 
78L, 77L, 61L, 62L, 31L, 56L, 34L, 57L, 25L, 81L, 75L, 59L, 2L, 
65L, 55L, 38L, 50L, 68L, 32L, 12L, 43L, 15L, 48L, 76L), .Label = c("AAMP", 
"ADCY10 SAC", "AIMP1 EMAP2 SCYE1", "ANTXR2 CMG2", "APBB1 FE65 RIR", 
"APC DP2", "APLP1", "ARHGAP26 GRAF KIAA0621 OPHN1L", "ARL4A ARL4", 
"ATP6V0D1 ATP6D VPATPD", "ATP6V1D ATP6M VATD", "AZIN2 ADC KIAA1945 ODCP", 
"CACNB2 CACNLB2 MYSB", "CAMK2D CAMKD", "CDCA8 PESCRG3", "CDK1 CDC2 CDC28A CDKN1 P34CDC2", 
"CEMIP KIAA1199", "CIB1 CIB KIP PRKDCIP", "CLTA", "CLTB", "CMTM8 CKLFSF8", 
"DMD", "DSP", "ECT2", "EHD2 PAST2", "ENTPD2 CD39L1", "ERBB2 HER2 MLN19 NEU NGL", 
"EVPL", "FCHO1 KIAA0290", "FCHO2", "FGR SRC2", "GPER1 CEPR CMKRL2 DRY12 GPER GPR30", 
"HDAC6 KIAA0901 JM21", "ITCH", "ITGB1BP1 ICAP1", "KCTD7", "KIFC3", 
"MFN1", "MISP C19orf21", "MYOT TTID", "NGDN C14orf120", "NISCH IRAS KIAA0975", 
"NR1D1 EAR1 HREV THRAL", "PGM5 PGMRP", "PKP4", "PLA2G6 PLPLA9", 
"PNKD KIAA1184 MR1 TAHCCP2 FKSG19 UNQ2491/PRO5778", "POP7 RPP20", 
"PPL KIAA0568", "PRDX3 AOP1", "PTOV1 ACID2 PP642 UNQ6127/PRO20092", 
"PTPN23 KIAA1471", "PTPRE", "PTPRR ECPTP PTPRQ", "RAB13 GIG4", 
"RAB23 HSPC137", "RAB29 RAB7L1", "RAB30", "RAB38", "RAB40AL RLGP", 
"RAB8A MEL RAB8", "RAB9A RAB9", "RACGAP1 KIAA1478 MGCRACGAP", 
"RAP1B OK/SW-cl", "RGS8", "RPSA LAMBR LAMR1", "SGIP1", "SHMT2", 
"SHROOM3 KIAA1481 SHRML MSTP013", "SLC28A3 CNT3", "SNTA1 SNT1", 
"SNTB1 SNT2B1", "SNX11", "SNX12", "STOM BND7 EPB72", "TEX10 L18 Nbla10363", 
"TNFRSF8 CD30 D1S166E", "TNS4 CTEN PP14434", "TRIM72 MG53", "USP6 HRP1 TRE2", 
"VCL", "YES1 YES"), class = "factor"), Nucleus = structure(c(3L, 
2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 
4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 
4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 
4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 5L, 5L, 5L, 5L, 5L, 
5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 1L, 1L, 1L, 2L, 2L, 2L, 2L, 2L, 
2L), .Label = c("Mitochondrion ", "Nucleus", "Nucleus ", "Plasma membrane", 
"Plasma membrane "), class = "factor"), Chromosome = structure(c(1L, 
2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 
2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 
2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 
2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 
2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 
3L), .Label = c("Chromosome", "Cytoplasm", "Cytoplasm "), class = "factor"), 
    Chromosome.1 = structure(c(4L, 5L, 7L, 5L, 14L, 12L, 20L, 
    18L, 5L, 20L, 20L, 2L, 1L, 1L, 8L, 10L, 19L, 1L, 1L, 8L, 
    16L, 16L, 17L, 19L, 20L, 21L, 15L, 13L, 1L, 1L, 1L, 1L, 1L, 
    1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 2L, 2L, 2L, 9L, 10L, 
    16L, 16L, 16L, 22L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 11L, 
    7L, 14L, 9L, 17L, 11L, 9L, 2L, 6L, 6L, 17L, 18L, 10L, 1L, 
    1L, 17L, 19L, 19L, 1L, 3L, 5L, 1L), .Label = c("", " ", "Chromosome", 
    "Cytoplasm ", "Cytoplasmic vesicle", "Cytoplasmic vesicle ", 
    "Endoplasmic reticulum", "Endosome", "Endosome ", "Golgi apparatus", 
    "Golgi apparatus ", "Midbody", "Midbody ", "Mitochondrion", 
    "Mitochondrion ", "Nucleus", "Nucleus ", "Perikaryon ", 
    "Plasma membrane", "Plasma membrane ", "Sarcoplasmic reticulum ", 
    "Secreted"), class = "factor"), Cytoplasm = structure(c(1L, 
    15L, 13L, 10L, 1L, 13L, 1L, 1L, 5L, 2L, 11L, 1L, 1L, 1L, 
    5L, 8L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 1L, 1L, 14L, 
    1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 
    1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 
    1L, 1L, 5L, 9L, 2L, 3L, 6L, 7L, 2L, 1L, 2L, 4L, 11L, 12L, 
    5L, 1L, 1L, 1L, 7L, 3L, 1L, 2L, 2L, 2L), .Label = c("", " ", 
    "Cytoplasmic vesicle", "Endoplasmic reticulum", "Endosome", 
    "Endosome ", "Golgi apparatus", "Golgi apparatus ", "Golgi appartus", 
    "Midbody", "Mitochondrion ", "Nucleus ", "Plasma membrane", 
    "Plasma membrane ", "Secreted "), class = "factor"), Cytoplasm.1 = structure(c(1L, 
    4L, 7L, 7L, 1L, 1L, 1L, 1L, 5L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 
    1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 
    1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 
    1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 
    1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 
    6L, 3L, 2L, 1L, 1L, 1L), .Label = c("", " ", "Endoplasmic reticulum", 
    "Endoplasmic reticulum ", "Endosome", "Mitochondrion", "Plasma membrane" 
    ), class = "factor"), Cytoplasmic.vesicle = structure(c(1L, 
    1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 
    1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 
    1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 
    1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 
    1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 
    1L, 2L, 1L, 1L, 1L, 1L), .Label = c("", "Golgi apparatus" 
    ), class = "factor"), Perikaryon = structure(c(2L, 1L, 1L, 
    1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 
    1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 
    1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 
    1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 
    1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 3L, 
    1L, 1L, 1L, 1L), .Label = c("", " ", "Golgi apparatus"), class = "factor"), 
    X = structure(c(1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 
    1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 
    1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 
    1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 
    1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 
    1L, 1L, 1L, 1L, 1L, 1L, 2L, 1L, 1L, 1L, 1L), .Label = c("", 
    "Cytoplasmic granule"), class = "factor"), X.1 = structure(c(1L, 
    1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 
    1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 
    1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 
    1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 
    1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 
    1L, 2L, 1L, 1L, 1L, 1L), .Label = c("", "Perikaryon"), class = "factor"), 
    X.2 = c(NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 
    NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 
    NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 
    NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 
    NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 
    NA, NA, NA, NA, NA, NA, NA, NA, NA), X.3 = c(NA, NA, NA, 
    NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 
    NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 
    NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 
    NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 
    NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 
    NA, NA, NA, NA), Plasma.membrane = c(NA, NA, NA, NA, NA, 
    NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 
    NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 
    NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 
    NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 
    NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 
    NA, NA), Plasma.membrane.1 = c(NA, NA, NA, NA, NA, NA, NA, 
    NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 
    NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 
    NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 
    NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 
    NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA 
    )), .Names = c("FMR1", "Nucleus", "Chromosome", "Chromosome.1", 
"Cytoplasm", "Cytoplasm.1", "Cytoplasmic.vesicle", "Perikaryon", 
"X", "X.1", "X.2", "X.3", "Plasma.membrane", "Plasma.membrane.1" 
), class = "data.frame", row.names = c(NA, -82L)) 

ich habe versucht, immer für jede Zeile ohne Glück, zum Beispiel:

unique(df1) # Original data with repeats removed 
dplyr::distinct(df1) # Retain only unique/distinct rows from an input tb 

Ich denke, das Problem ist, dass die oben genannten Funktionen nach Zeilennamen suchen, die identisch sind, was ich nicht möchte. Ich möchte verschiedene Spalten für jede Zeile haben. Ich dachte über die Verwendung der melt Funktion, aber da es eine ungerade Anzahl von Spalten für jede Zeile gibt, wird dies nicht funktionieren.

Ich würde erwarten, dass die Ausgabe wie von hier aus newDF

structure(list(FMR1 = structure(c(7L, 1L, 3L, 9L, 2L, 4L, 6L, 
5L, 8L), .Label = c("AIMP1 EMAP2 SCYE1", "CDK1 CDC2 CDC28A CDKN1 P34CDC2", 
"CEMIP KIAA1199", "ECT2", "HDAC6 KIAA0901 JM21", "ITGB1BP1 ICAP1", 
"NGDN C14orf120", "PTPN23 KIAA1471", "RACGAP1 KIAA1478 MGCRACGAP" 
), class = "factor"), Nucleus = structure(c(2L, 1L, 1L, 1L, 1L, 
1L, 1L, 1L, 1L), .Label = c("Nucleus", "Nucleus "), class = "factor"), 
    Chromosome = structure(c(1L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 
    2L), .Label = c("Chromosome", "Cytoplasm"), class = "factor"), 
    Cytoplasmic.vesicle = structure(c(1L, 8L, 2L, 4L, 5L, 4L, 
    7L, 6L, 3L), .Label = c("Cytoplasm ", "Endoplasmic reticulum", 
    "Endosome", "Midbody", "Mitochondrion", "Perikaryon ", "Plasma membrane ", 
    "Secreted "), class = "factor"), Perikaryon = structure(c(1L, 
    2L, 3L, 3L, 1L, 3L, 1L, 1L, 1L), .Label = c("", "Endoplasmic reticulum ", 
    "Plasma membrane"), class = "factor"), Plasma.membrane = c(NA, 
    NA, NA, NA, NA, NA, NA, NA, NA)), .Names = c("FMR1", "Nucleus", 
"Chromosome", "Cytoplasmic.vesicle", "Perikaryon", "Plasma.membrane" 
), class = "data.frame", row.names = c(NA, -9L)) 

aussieht ich ein rowSums(df1) bekommen möchte, damit ich denke jeden Begriff auf eine Reihe Nötigung (zB cytoplasmatische Vesikel = 1, Kern = 1, Endoplasmatisches Retikulum = 1, usw.), aber auf dieses Dummy-Dataset ein Problem haben.

df2 <- as.numeric(newDF) 
Error: (list) object cannot be coerced to type 'double' 
df2 <- as.numeric(newDF[,2:n]) 
Error in 2:n : NA/NaN argument 

Vielen Dank für Ihre Hilfe.

EDIT

Ich mag eine Zählung für jede Reihe von, wie viele einzelnen Spalten in den newDF wie so erhalten:

FMR1 5 
NGDN C14orf120 3 
AIMP1 EMAP2 SCYE1 4 
CEMIP KIAA1199 4 
RACGAP1 KIAA1478 MGCRACGAP 4 
CDK1 CDC2 CDC28A CDKN1 P34CDC2 3 
ECT2 4 
ITGB1BP1 ICAP1 3 
HDAC6 KIAA0901 JM21 3 
PTPN23 KIAA1471 3 
+0

Mögliches Duplikat [Effizienz verbessert für doppelte Werte pro Zeile zu entfernen und verschieben Werte in R] (https://stackoverflow.com/questions/47493557/improve-efficiency-for-removing-duplicate-values-per -row-and-shift-values-in-r) –

+0

@Hardikgupta Die vorgeschlagenen Antworten in diesem Link funktionieren nicht für meine Daten. Zum Beispiel: 'privefl = as.data.frame (t (apply (t (temp), 2, myf)))' Für Protein FMR1 wurden nur teilweise Werte verschoben, es gibt immer noch eine leere Spalte zwischen ** Perikaryon ** und ** Plasmamembran **, ohne NA-Wert. Es hat auch keine der doppelten Werte entfernt. –

+0

@ MatthewJ.Oldach Ich würde gerne Ihr erwartetes Ergebnis wissen. Wenn Sie Ihre Frage lesen, möchten Sie wissen, wie viele Spalten jedes Gen enthält. Sie möchten also einen Datenrahmen mit den Namen der Gene und der Gesamtzahl sehen. Ist das richtig? – jazzurro

Antwort

2

Dies kann man seinen Weg zu gehen. Da Ihr erwartetes Ergebnis ein Zeichenvektor ist, kann ich die endgültige Ausgabe nicht visualisieren. Sie haben jedoch gesagt, dass Sie überprüfen möchten, wie viele Spalten jedes Protein in den Daten enthält. Ich hoffe, das Ergebnis, das ich habe, ist das, wonach Sie suchen.

Zuerst habe ich alle Spalten in Zeichen umgewandelt. Dann konvertierte ich die Daten zu Langformat eins unter Verwendung gather(). Für jede subzelluläre Strukturgruppe (d. H. Subzellulär) fügte ich Reihenindizes hinzu (z. B. 1 bedeutet die erste Reihe in den ursprünglichen Daten) und trimme Leerraum. Dann entfernen Sie alle Zeilen mit NA in Protein. Entfernen Sie alle Zeilen mit "" und " ". Jetzt ist aufgeräumt. Entfernen Sie für jede Zeile (d. H. row.index) duplizierte Proteintypen. Gruppierung der Daten aufheben und schließlich zählen, wie viele Spalten jedes Protein erscheint (d. H. Suzelluläre Struktur). Grundsätzlich möchten Sie zählen, wie oft jedes Protein zu diesem Zeitpunkt im Datensatz erscheint.

Mit Ihren Beispieldaten habe ich das folgende Ergebnis erhalten. Aber ich bin mir nicht sicher, ob du das willst. (Ich bin zu Bett jetzt. So kann ich Sie nicht für einige Stunden helfen. Wenn jemand einspringen können, tun Sie dies bitte.)

mutate_all(mydf, as.character) %>% 
gather(key = subcellular, value = protein) %>% 
group_by(subcellular) %>% 
mutate(row.index = 1:n(), 
     protein = trimws(protein)) %>% 
filter(!is.na(protein)) %>% 
filter(!protein %in% c("", " ")) %>% 
group_by(row.index) %>% 
filter(!duplicated(protein)) %>% 
ungroup %>% 
count(protein, sort = TRUE) 


#     protein  n 
#     <chr> <int> 
# 1    Cytoplasm 82 
# 2  Plasma membrane 70 
# 3    Nucleus 25 
# 4    Endosome  9 
# 5   Mitochondrion  9 
# 6 Cytoplasmic vesicle  8 
# 7  Golgi apparatus  7 
# 8 Endoplasmic reticulum  5 
# 9    Midbody  3 
#10   Perikaryon  3 
# ... with 87 more rows 

Bei jjl "s Kommentar, habe ich die folgenden.Anstatt zu zählen, wie viele Spalten jedes Protein enthält, zählte ich, wie viele Proteinnamen für jede Zeile existieren.

mutate_all(mydf, as.character) %>% 
gather(key = subcellular, value = protein) %>% 
group_by(subcellular) %>% 
mutate(row.index = 1:n(), 
     protein = trimws(protein)) %>% 
filter(!is.na(protein)) %>% 
filter(!protein %in% c("", " ")) %>% 
group_by(row.index) %>% 
filter(!duplicated(protein)) %>% 
ungroup %>% 
count(row.index) 

# row.index  n 
#  <int> <int> 
# 1   1  4 
# 2   2  6 
# 3   3  5 
# 4   4  6 
# 5   5  4 
# 6   6  5 
# 7   7  4 
# 8   8  4 
# 9   9  5 
#10  10  3 
# ... with 72 more rows 

EDIT

Wenn Sie die erste Spalte entfernen möchten (das heißt, FMR1), können Sie tun, indem Sie die Spalte filtern. Ich fügte filter(subcellular != "FMR1") meinem Code hinzu, bevor ich count() am Ende verwendete.

mutate_all(mydf, as.character) %>% 
gather(key = subcellular, value = protein) %>% 
group_by(subcellular) %>% 
mutate(row.index = 1:n(), 
     protein = trimws(protein)) %>% 
filter(!is.na(protein)) %>% 
filter(!protein %in% c("", " ")) %>% 
group_by(row.index) %>% 
filter(!duplicated(protein)) %>% 
ungroup %>% 
filter(subcellular != "FMR1") %>% 
count(row.index) 

# A tibble: 9 x 2 
# row.index  n 
#  <int> <int> 
#1   1  3 
#2   2  4 
#3   3  4 
#4   4  4 
#5   5  3 
#6   6  4 
#7   7  3 
#8   8  3 
#9   9  3 
+0

Schöne Antwort. Wenn ich den Aufruf rowSums (df1) richtig interpretiere, möchte er wissen, wie viele Kompartimente es pro Protein gibt und nicht die Häufigkeit der Kompartimente. Aber ich könnte falsch liegen. – jjl

+0

Danke @jjl das ist richtig, das ist was ich gesucht habe. –

+0

Vielen Dank @jazzurro für die Bearbeitung "wie viele Namen existieren für jede Zeile". Ich habe nur ein bisschen vorher mit tidyr und dplyr gearbeitet, aber Sie haben mich wirklich inspiriert, mehr über das dplyr-Paket zu erfahren. Ich habe gerade eine Mitgliedschaft bei datacamp.com gekauft und nehme die Klasse [Joining Data in R with dplyr] (https://www.datacamp.com/courses/joining-data-in-r-with-dplyr) :) –

Verwandte Themen