2016-09-19 3 views
-1

Ich habe zwei Datenrahmen einer mit sieben Zeilen der andere mit 2 Zeilen. Hier sind die beiden Rahmen:Kombination von zwei Datenrahmen unterschiedlicher Länge an bestimmten Standorten

   content ChatPosition 
1 This is a start line  START 
2 This is a middle line  MIDDLE 
3 This is a middle line  MIDDLE 
4 This is the last line   END 
5 This is a start line  START 
6 This is a middle line  MIDDLE 
7 This is the last line   END 

und

rating text_type 
1 0.2324 Postive 
2 0.8999 Postive 

Grundsätzlich ich die beiden Datenrahmen zusammenführen möchten, aber ich möchte, dass sie verschmelzen, so dass die Werte in der Bewertung und text_type Datenrahmen Line-Up mit Werten in der 1. und 5. Zeile des ersten Datenrahmens. Mit anderen Worten: die Werte von DF2 sollten nur eingesetzt werden, wenn die ChatPosition value = „START“ So will ich mit einem Datenrahmen, um am Ende der wie folgt aussieht:

   content ChatPosition rating text_type 
1 This is a start line  START 0.2324 Postive 
2 This is a middle line  MIDDLE  NA  <NA> 
3 This is a middle line  MIDDLE  NA  <NA> 
4 This is the last line   END  NA  <NA> 
5 This is a start line  START 0.8999 Postive 
6 This is a middle line  MIDDLE  NA  <NA> 
7 This is the last line   END  NA  <NA> 

ich um Stack hatte einen Blick, so scheint es zu eine Reihe von Fragen und Antworten, die sich auf die Lösung eines ähnlichen Problems beziehen, bei dem das OP keine spezifischen übereinstimmenden Kriterien für die beiden zusammenzufügenden Frames angibt. Es gibt hier einen nützlichen Code, aber ich konnte ihn nicht erweitern, um mein Problem zu lösen:

combining two data frames of different lengths.

Ich habe Code unten eingefügt, um die beiden Datenfelder zu erhalten. Wenn jemand helfen kann, wäre das sehr geschätzt.

content <- c("This is a start line" , "This is a middle line" , "This is a middle line" ,"This is the last line" , 
     "This is a start line" , "This is a middle line" , "This is the last line") 
ChatPosition <- c("START" , "MIDDLE" , "MIDDLE" , "END" , "START" ,"MIDDLE" , "END") 


df <- data.frame(content, ChatPosition) 
df 

rating <- c(0.2324, 0.8999) 
text_type <- c("Postive", "Postive") 
df2 <- data.frame(rating, text_type) 
df2 

Antwort

1

Ich denke, man es am einfachsten, indem leere Spalten tun können und sie dann Füllung bedingt

df3<- df 
df3 
df3$rating<- NA 
df3$text_type<- NA 

df3$rating[df3$ChatPosition=="START"]<- df2$rating 
df3$text_type[df3$ChatPosition=="START"]<- as.character(df2$text_type) 

df3 

Edit: In diesem Ich gehe davon aus, dass Sie wollte die Bewertungen in Zeilen mit der Bezeichnung START

+0

Danke R. S. Dies ist eine nette Lösung, da nicht angenommen wird, wo sich die Zeilen mit ChatPosition == "START" befinden. Es wird nur basierend auf einem Match eingefügt. Cheers. J –

2

Zum Beispiel

row.names(df2) <- c(1,5) 
merge(df, df2, by="row.names", all.x=TRUE)[,-1] 
#     content ChatPosition rating text_type 
# 1 This is a start line  START 0.2324 Postive 
# 2 This is a middle line  MIDDLE  NA  <NA> 
# 3 This is a middle line  MIDDLE  NA  <NA> 
# 4 This is the last line   END  NA  <NA> 
# 5 This is a start line  START 0.8999 Postive 
# 6 This is a middle line  MIDDLE  NA  <NA> 
# 7 This is the last line   END  NA  <NA> 
+0

einfügen Danke für die Lösung lukeA, The row nam Es Zeilen basiert auf dem Wissen, welche Zeilen ich einfügen muss. Ich denke, ich suche nach den Zeilen, die ich einfügen muss, wenn sich die Zeilenposition ändert. –

Verwandte Themen