Merge dataframes, different lengths
You could add a join variable to dat2 then using merge:
dat2$variable <- rownames(dat2)
merge(dat1, dat2)
variable ID value concreteness familiarity typicality
1 amoeba 1 0 3.60 1.30 1.71
2 amoeba 2 0 3.60 1.30 1.71
3 amoeba 3 NA 3.60 1.30 1.71
4 bacterium 1 0 3.82 3.48 2.13
5 bacterium 2 0 3.82 3.48 2.13
6 bacterium 3 0 3.82 3.48 2.13
7 leech 1 1 5.71 1.83 4.50
8 leech 2 1 5.71 1.83 4.50
9 leech 3 0 5.71 1.83 4.50
How can I combine two dataframes with different lengths in R?
Try using left_join in the dplyr package.
library(dplyr)
# make fake data
df1 <- data.frame(id = c("A", "B", "C", "D", "E"), val = rpois(5, 5))
df2 <- data.frame(id = c("A", "B", "C", "E"), val = rpois(4, 20))
# use left_join
df3 <- left_join(df1, df2, by = "id")
# rename and set NAs to 0
names(df3) <- c("id", "val", "val")
df3[is.na(df3)] <- 0
How to merge two dataframes with different lengths in python
I assume your output should look somewhat like this:
Week | Coeff1 | Coeff2 |
---|---|---|
1 | -0.456662 | 0.571707 |
1 | -0.533774 | 0.086152 |
1 | -0.432871 | 0.824832 |
2 | 3 | 3 |
2 | NaN | 3 |
how to combine two data frames of different lengths?
This is too long for a comment, but really just need to demonstrate that the solution I gave in comments does work. If you are having problems with getting merge to work, then there must be some other issue with your data, which we cannot diagnose because you did not provide a dput of your data.frames
df1 = read.table(text =
"Date Duration
6/27/2014 10.00
6/30/2014 20.00
7/11/2014 15.00",
header = T)
df2 = read.table(text =
"Date Percent_Removal
6/27/2014 20.39
6/30/2014 27.01
7/7/2014 49.84
7/11/2014 59.48
7/17/2014 99.04",
header = T)
df1$Date <- as.Date (df1$Date, format= "%m/%d/%Y")
df2$Date <- as.Date (df2$Date, format= "%m/%d/%Y")
df3 = merge(df1,df2)
# Date Duration Percent_Removal
# 1 2014-06-27 10 20.39
# 2 2014-06-30 20 27.01
# 3 2014-07-11 15 59.48
Note that no additional options need to be specified in the merge statement because
- The default value
by =
is the column names that are common to both data frames. In this case, onlyDate
is shared. - the default values of
all.x
,all.y
andall
give the desired behaviour where only the rows that are in both data frames are kept.
Merging data frames of different lengths without unique keys
dplyr::bind_rows(df1,df2)
# Warning in bind_rows_(x, .id) :
# Unequal factor levels: coercing to character
# Warning in bind_rows_(x, .id) :
# binding character and factor vector, coercing into character vector
# Warning in bind_rows_(x, .id) :
# binding character and factor vector, coercing into character vector
# Name Age School
# 1 Steve 10 <NA>
# 2 Peter 20 <NA>
# 3 Jason NA xyz
# 4 Nelson NA abc
You can alleviate some of this by pre-assigning unrecognized columns, which also works well with base R:
df2 <- cbind(df2, df1[NA,setdiff(names(df1), names(df2)),drop=FALSE])
df1 <- cbind(df1, df2[NA,setdiff(names(df2), names(df1)),drop=FALSE])
df1
# Name Age School
# NA Steve 10 <NA>
# NA.1 Peter 20 <NA>
df2
# Name School Age
# NA Jason xyz NA
# NA.1 Nelson abc NA
# ensure we use the same column order for both frames
nms <- names(df1)
rbind(df1[,nms], df2[,nms])
# Name Age School
# NA Steve 10 <NA>
# NA.1 Peter 20 <NA>
# NA1 Jason NA xyz
# NA.11 Nelson NA abc
Merge two python pandas data frames of different length but keep all rows in output data frame
You can read the documentation here: http://pandas.pydata.org/pandas-docs/stable/generated/pandas.DataFrame.merge.html
What you are looking for is a left join. The default option is an inner join. You can change this behavior by passing a different how argument:
df1.merge(df2,how='left', left_on='Column1', right_on='ColumnA')
How can I merge two data frames with different length and with two conditions in R?
You can use the left_join
with by
to join by multiple columns. You can use the following code:
library(dplyr)
df3 <- left_join(df2, df1, by = c("From" = "Country", "Year" = "Year"))
Output:
Year From Vote To Score
1 1 NE 1 Ger 0.8
2 1 NE 2 I 0.8
3 1 UK 2 Ger 0.9
4 1 UK 3 I 0.9
5 2 NE 2 Ger 0.7
6 2 NE 2 I 0.7
7 2 UK 4 Ger 1.0
8 2 UK 2 I 1.0
Related Topics
How to Convert Long to Wide Format With Counts
R Install.Packages Returns "Failed to Create Lock Directory"
Yaml Current Date in Rmarkdown
Basic Lag in R Vector/Dataframe
Replace Missing Values With Column Mean
How to Display Only Integer Values on an Axis Using Ggplot2
Frequency Count of Two Column in R
How to Perform Natural (Lexicographic) Sorting in R
Sum Values in a Rolling/Sliding Window
Aggregate a Data Frame Based on Unordered Pairs of Columns
Ggplot, Drawing Line Between Points Across Facets
What Ways Are There to Edit a Function in R
Dplyr Filter: Get Rows With Minimum of Variable, But Only the First If Multiple Minima
Put Stars on Ggplot Barplots and Boxplots - to Indicate the Level of Significance (P-Value)