簡體   English   中英

加入數據框 R 並重復值

[英]Join dataframes R and repeat values

我想加入兩個數據集並向所有行添加一個帶有值的新向量。 數據集包含不同數量的行,並且不同行中的某些值不匹配,我仍然希望添加新向量的值。

df1 <- data.frame(
  material = c("D", "D", "D", "A", "A", "A"),
  RH = c(85, 90, 95, 80, 85, 90),
  f = c(NA, NA, 92, 23, 14, 7)
)
df2 <- data.frame(
  material = c("D", "A"),
  RH = c(95, 80),
  f = c(92, 23),
  p3 = c(12, 32)
)

這就是我想要的結果

wanted <- data.frame(
  material = c("D", "D", "D", "A", "A", "A"),
  RH = c(85, 90, 95, 80, 85, 90),
  f = c(NA, NA, 92, 23, 14, 7),
  p3 = c(12, 12, 12, 32, 32, 32)
)

我嘗試了“join”的不同變體,例如left_join(df1,df2)但它沒有給出想要的結果

一種方法是使用 dplyr package 中的left_join left_join() function。

我正在對df2 dataframe 進行子集化,以便僅包含與df1material )中的列和要添加的列( p3 )匹配的列。

library(dplyr)

df1 <- data.frame(
  material = c("D", "D", "D", "A", "A", "A"),
  RH = c(85, 90, 95, 80, 85, 90),
  f = c(NA, NA, 92, 23, 14, 7)
)
df2 <- data.frame(
  material = c("D", "A"),
  RH = c(95, 80),
  f = c(92, 23),
  p3 = c(12, 32)
)
wanted <- data.frame(
  material = c("D", "D", "D", "A", "A", "A"),
  RH = c(85, 90, 95, 80, 85, 90),
  f = c(NA, NA, 92, 23, 14, 7),
  p3 = c(12, 12, 12, 32, 32, 32)
)

# Subset df2 to keep only material and p3 columns,
# makes joining more straightforward
df2_selected <- select(df2, material, p3)

result <- left_join(df1, df2_selected, by = "material")
result
#>   material RH  f p3
#> 1        D 85 NA 12
#> 2        D 90 NA 12
#> 3        D 95 92 12
#> 4        A 80 23 32
#> 5        A 85 14 32
#> 6        A 90  7 32

identical(wanted, result)
#> [1] TRUE

注意:這種方法假設df2中的p3列僅依賴於material 您也可以通過修改left_join()by =參數來組合多個列。 有關更多詳細信息,請參閱文檔

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM