मैं दो डेटाफ्रेम में शामिल होने की कोशिश कर रहा हूं। जुड़ने की शर्त ColumnA=ColumnB नहीं बल्कि ColumnA=ColumnB*Function है। फ़ंक्शन मर्ज के साथ, मैं नहीं देखता कि मैं इसे कैसे संभाल सकता हूं
एक उदाहरण है,
df1 <- data.frame(ID=c(5,4,3,2), CASE=c("A","B","C","D"))
df2 <- data.frame(ID=c(6,5,4,3), RESULT=c("ResultA","ResultB","ResultC","ResultD"))
मैं परिणाम प्राप्त करने के लिए df1$ID = df2$ID - 1 जैसे कुछ के साथ df1 और df2 में शामिल होना चाहता हूं:
df_result<- data.frame(ID_df1=c(5,4,3,2), CASE=c("A","B","C","D"), RESULT=c("Result5","Result4","Result3","Result2"))
मैंने शामिल होने में उद्धरण चिह्नों को हटाने का प्रयास किया है, लेकिन यह काम नहीं करता है:
df_result <- merge ( x = df1, y = df2, by.x = ID , by.y = ID - 1 , all.x = TRUE)
क्या कोई मेरी मदद कर सकता है? : )
शुक्रिया !
1 उत्तर
आपके अपेक्षित आउटपुट को पुन: पेश करने के लिए एक tidyverse
समाधान होगा
library(tidyverse)
left_join(df1, df2 %>% mutate(ID = ID - 1)) %>%
mutate(RESULT = str_replace(RESULT, "^(.+)[A-Z]$", paste0("\\1", ID)))
#Joining, by = "ID"
# ID CASE RESULT
#1 5 A Result5
#2 4 B Result4
#3 3 C Result3
#4 2 D Result2
व्याख्या: यदि आप केवल ID
और ID - 1
द्वारा एक साधारण विलय करना चाहते हैं
left_join(df1, df2 %>% mutate(ID = ID - 1))
# ID CASE RESULT
#1 5 A ResultA
#2 4 B ResultB
#3 3 C ResultC
#4 2 D ResultD
काफी है। अतिरिक्त mutate
आपके अपेक्षित आउटपुट के अनुसार RESULT
का नाम बदलने का ध्यान रखता है।
या आधार R विकल्प से शुरू होगा
merge(df1, transform(df2, ID = ID - 1), by = "ID")
# ID CASE RESULT
#1 2 D ResultD
#2 3 C ResultC
#3 4 B ResultB
#4 5 A ResultA
और नाम बदलने सहित RESULT
transform(
merge(df1, transform(df2, ID = ID - 1), by = "ID"),
RESULT = paste0(substr(RESULT, 1, nchar(as.character(RESULT)) - 1), ID))
# ID CASE RESULT
#1 2 D Result2
#2 3 C Result3
#3 4 B Result4
#4 5 A Result5
अपने अपेक्षित आउटपुट को पुन: प्रस्तुत करना (थोड़ा अलग पंक्ति क्रम के साथ)।