2017-07-13 10 views
0

Ich habe eine TabelleR Sprache Kombination verschiedene Tabellen

grade  gradepoint 
    o    10 
    A    9 
    B    8 

Ich habe zweite Tabelle

subjectname  credits 
    englishI   3 
    mI    3 
    AC Lab   2 

I dritte Tabelle haben Qualitäten für verschiedene Disziplinen wie dies I

rollno  englishI  mI    ACLab 
    1   A   B    o 
    2   B   B    o 

jetzt enthaltend benötigen Sie eine Tabelle mit Unterspalten in jeder Spalte in der dritten Tabelle

rollno  englishI      mI     ACLab   
     grade gradepoint Credits grade gradepoint Credit grade gradepoint credit 
1   A  9   3  B  8   3  o  10            2 
2   B  8   3  B  8   3  o  10      2 

, wie dieser Datenrahmen in einen Datenrahmen zu verbinden, und wie für den Zugriff auf Unterspalten in einer Spalte

+0

Geben Sie den Eingang und die gewünschte Ausgabe ein ^^ – Adamm

+2

Willkommen bei StackOverflow! Bitte lesen Sie die Informationen über [wie man eine gute Frage stellt] (http://stackoverflow.com/help/how-to-ask) und wie man ein [reproduzierbares Beispiel gibt] (http://stackoverflow.com/questions/ 5963269). Dies wird es anderen sehr erleichtern, Ihnen zu helfen. – Sotos

+0

Ich habe die ersten 3 Tabellen (Eingänge) und ich möchte 3 Tabellen Daten in einer Tabelle wie 4. hier (Ausgabe) kombinieren. –

Antwort

0

Eine Lösung dplyr und tidyr verwenden. Beachten Sie, dass gleichnamige Kommentarsubkolumnen im Datenrahmen nicht gut unterstützt werden. Daher habe ich für jede Spalte kombinierte Spaltennamen wie englishI_credits erstellt. dt4 ist die endgültige Ausgabe.

# Load package 
library(dplyr) 
library(tidyr) 

# Create table 1 
df1 <- read.table(text = "grade  gradepoint 
    o    10 
        A    9 
        B    8", 
        header = TRUE, stringsAsFactors = FALSE) 

# Create table 2 
df2 <- read.table(text = "subjectname  credits 
    englishI   3 
        mI    3 
        ACLab   2", 
        header = TRUE, stringsAsFactors = FALSE) 

# Create table 3 
df3 <- read.table(text = "rollno  englishI  mI    ACLab 
    1   A   B    o 
        2   B   B    o", 
        header = TRUE, stringsAsFactors = FALSE) 

# Process the data 
df4 <- df3 %>% 
    gather(subjectname, grade, -rollno) %>% 
    left_join(df1, by = "grade") %>% 
    left_join(df2, by = "subjectname") %>% 
    gather(info, value, grade:credits) %>% 
    unite(item, subjectname, info) %>% 
    spread(item, value) %>% 
    # Convert character numbers to numeric 
    mutate_if(function(Col){all(!grepl("\\D", Col))}, as.numeric) 
+0

danke. also denke ich, dass keine Unterspalten möglich sind. Bitte erklären Sie, was die letzte Zeile ist, dh mutate_if (Funktion (Col) {all (! grepl ("\\ D", Col))}, as.numeric) –

+0

Bestimmt, ob a Spaltenelemente sind alle Zahlen. Es 'TRUE', wandeln Sie es in numerisch um. Sie können diese Zeile entfernen, wenn Sie diese Spalten nicht numerisch benötigen. – www

Verwandte Themen