0

Well I have these dummy data frames and i want based on the characterization that smaller data frame uses to characterize the bigger based on data1$v1 and data2$v2

v1<-as.character(c(1,1,1,1,1,2,2,2,3,3,3,4,4,4,5,5,5,5,6,6,6,7))
set.seed(2)
values<-as.numeric(rnorm(22))
data1<-as.data.frame(cbind(v1,values))
v2<-as.character(c(1,2,3,4,5,6,7))
v3<-as.character(c("happy","sad","angry","in love","wondering","dull","smirking"))
data<-as.data.frame(cbind(v2,v3))

**OUTPUT NEEDED**


 v1              values    character
1   1  -0.896914546624981     happy
2   1   0.184849184646742     happy
3   1    1.58784533120882     happy
4   1   -1.13037567424629     happy
5   1 -0.0802517565509893     happy
6   2   0.132420284381094      sad
7   2   0.707954729271733      sad
8   2   -0.23969802417184      sad
9   3    1.98447393665293     angry
10  3  -0.138787012119665     angry
11  3   0.417650750792556     angry
12  4   0.981752777463662     in love
13  4  -0.392695355503813     in love
14  4   -1.03966897694891     in love
15  5    1.78222896030858     wondering
16  5   -2.31106908460517     wondering
17  5   0.878604580921265     wondering
18  5   0.035806718015226     wondering
19  6    1.01282869212708     dull
20  6   0.432265154539617     dull
21  6    2.09081920524915     dull
22  7   -1.19992581964387     smirking

3 Answers3

1

You can merge your dataframes use base merge.

df<-merge(x = data1, y = data, by.x ='v1',by.y = 'v2', all.x = TRUE,all.y = TRUE)
colnames(df)[3] <- "character"

> df
   v1              values character
1   1  -0.896914546624981     happy
2   1   0.184849184646742     happy
3   1    1.58784533120882     happy
4   1   -1.13037567424629     happy
5   1 -0.0802517565509893     happy
6   2   0.132420284381094       sad
7   2   0.707954729271733       sad
8   2   -0.23969802417184       sad
9   3    1.98447393665293     angry
10  3  -0.138787012119665     angry
11  3   0.417650750792556     angry
12  4   0.981752777463662   in love
13  4  -0.392695355503813   in love
14  4   -1.03966897694891   in love
15  5    1.78222896030858 wondering
16  5   -2.31106908460517 wondering
17  5   0.878604580921265 wondering
18  5   0.035806718015226 wondering
19  6    1.01282869212708      dull
20  6   0.432265154539617      dull
21  6    2.09081920524915      dull
22  7   -1.19992581964387  smirking
Daman deep
  • 631
  • 3
  • 14
0

You can use left join to produce character variable according to v1.

Here i use dplyr to accomplish your goal.

set.seed(2)
values<-as.numeric(rnorm(22))
data1<-as.data.frame(cbind(v1,values))
v2<-as.character(c(1,2,3,4,5,6,7))
v3<-as.character(c("happy","sad","angry","in love","wondering","dull","smirking"))
data<-as.data.frame(cbind(v2,v3))


library(dplyr)

# Renaming v2 to v1 in order to left join data on data1
names(data)[1]<-"v1"

data1 %>%
  left_join(data)
```
Ege Can
  • 195
  • 1
  • 10
0
dplyr::left_join(data1, data, by = c('v1' = 'v2'))

   v1              values        v3
1   1  -0.896914546624981     happy
2   1   0.184849184646742     happy
3   1    1.58784533120882     happy
4   1   -1.13037567424629     happy
5   1 -0.0802517565509893     happy
6   2   0.132420284381094       sad
7   2   0.707954729271733       sad
8   2   -0.23969802417184       sad
9   3    1.98447393665293     angry
10  3  -0.138787012119665     angry
11  3   0.417650750792556     angry
12  4   0.981752777463662   in love
13  4  -0.392695355503813   in love
14  4   -1.03966897694891   in love
15  5    1.78222896030858 wondering
16  5   -2.31106908460517 wondering
17  5   0.878604580921265 wondering
18  5   0.035806718015226 wondering
19  6    1.01282869212708      dull
20  6   0.432265154539617      dull
21  6    2.09081920524915      dull
22  7   -1.19992581964387  smirking
AnilGoyal
  • 25,297
  • 4
  • 27
  • 45