我正在嘗試在 R 中將兩個資料框合并在一起。一個是唯一位置及其隨附屬性的串列,這些屬性都具有這些位置的唯一識別符號(資料框 1)。另一個是來自這些地方的較小子集的物種串列(資料框 2)。在 DF2 中,有很多物種來自同一個地方(大約 100 個地方的 50 個物種)。我正在嘗試合并 DF1 和 DF2,以便為每個物種分配適當的位置資訊。
DF1 中的列是因子(第 1 列)和數字的混合
DF1
NHDPlusID StreamLeve StreamOrde StreamCalc
60003700019787 5 1 1
60003700019816 5 2 2
60003700019822 5 1 1
60003700019844 4 1 1
60003700019882 5 1 1
DF2 也是因子、數字和字符的混合體
DF2
NHDPlusID Spec.
60003700019787 A
60003700019816 B
60003700019882 A
60003700019822 C
60003700019787 C
60003700019844 B
60003700019882 A
60003700019822 B
60003700019787 C
期望的結果
NHDPlusID Spec. StreamLeve StreamOrde StreamCalc
60003700019787 A 5 1 1
60003700019816 B 5 2 2
60003700019882 A 5 1 1
60003700019822 C 5 1 1
60003700019787 C 5 1 1
60003700019844 B 4 1 1
60003700019882 A 5 1 1
60003700019822 B 5 1 1
60003700019787 C 5 1 1
我最初的代碼是使用
DF3<-dplyr::left_join(DF2,DF1, by="NHDPlusID")
但是使用它,來自 DF2 的所有內容都會顯示出來,并且來自 DF1 的列附加到新的 DF3 資料框,但附加列中的所有值都變為 NA。
NHDPlusID Spec. StreamLeve StreamOrde StreamCalc
60003700019787 A NA NA NA
60003700019816 B NA NA NA
60003700019882 A NA NA NA
60003700019822 C NA NA NA
60003700019787 C NA NA NA
60003700019844 B NA NA NA
60003700019882 A NA NA NA
60003700019822 B NA NA NA
60003700019787 C NA NA NA
uj5u.com熱心網友回復:
您的資料:
DF1 <- data.frame(Site = c("A", "B", "C"),
Feature1 = c("XX", "XY", "ZZ"),
Feature2 = c("YY", "YX", "WW"))
DF2 <- data.frame(Individual = c(1,2,3,4,5,6,7,8,9),
Site = c("A", "B", "A", "C", "C", "B", "A", "B", "C"))
您可以使用以下代碼:
library(dplyr)
df_desired <- left_join(DF2, DF1, by = "Site")
輸出:
Individual Site Feature1 Feature2
1 1 A XX YY
2 2 B XY YX
3 3 A XX YY
4 4 C ZZ WW
5 5 C ZZ WW
6 6 B XY YX
7 7 A XX YY
8 8 B XY YX
9 9 C ZZ WW
uj5u.com熱心網友回復:
使用基礎 R:
df1 <- data.frame(
Site = c("A", "B", "C"),
Feature1 = c("XX", "XY", "ZZ"),
Feature2 = c("YY", "YX", "WW")
)
df2 <- data.frame(
Individual = c(1L, 2L, 3L, 4L, 5L, 6L, 7L, 8L, 9L),
Site = c("A", "B", "A", "C", "C", "B", "A", "B", "C")
)
merge(df2, df1, by = "Site")[c(2,1,3:4)]
#> Individual Site Feature1 Feature2
#> 1 1 A XX YY
#> 2 3 A XX YY
#> 3 7 A XX YY
#> 4 2 B XY YX
#> 5 8 B XY YX
#> 6 6 B XY YX
#> 7 5 C ZZ WW
#> 8 4 C ZZ WW
#> 9 9 C ZZ WW
uj5u.com熱心網友回復:
將您的資料用于 df1 和 df2 復制粘貼:
df1 <- read_table('Site Feature1 Feature2
A XX YY
B XY YX
C ZZ WW ')
df2 <- read_table('Individual Site
1 A
2 B
3 A
4 C
5 C
6 B
7 A
8 B
9 C')
現在要獲得與您相同的輸出:只需將 join- df2 與 df1 而不是其他方式 - 通過“站點”并重新排序列。現在,如果您將輸出分配給 DF2,它將被保存!
df2 <- dplyr::left_join(x=df2,y=df1,by=c('Site'))%>%select(Individual,everything())
現在按照步驟進行;df2 已成為:
df2
> df2
# A tibble: 9 x 4
Individual Site Feature1 Feature2
<dbl> <chr> <chr> <chr>
1 1 A XX YY
2 3 A XX YY
3 7 A XX YY
4 2 B XY YX
5 6 B XY YX
6 8 B XY YX
7 4 C ZZ WW
8 5 C ZZ WW
9 9 C ZZ WW
你得到什么錯誤?請確保使用<-
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/450195.html
