我正在审查Create a new column based on the the values and heading of another dataset和R - Add a column on a dataset based on values from another dataset,但我想使用数据集的输出,而不是我试图重新合并到我的新数据集的一个数据集的输出。
要添加行的数据集% 1
Species Association Day month year season cover evi
<fctr> <chr> <dbl> <dbl> <dbl> <chr> <chr> <chr>
21 BW RC 22 1 2 dry Evergreen edge
22 MANG RC 22 1 2 dry Evergreen edge
23 RC RC 22 1 2 dry Evergreen edge
24 RC SKS 22 1 2 dry Evergreen edge
25 RC NA 22 1 2 dry Mixed edge
26 SKS MANG 22 1 2 dry Evergreen edge
27 RC NA 30 1 2 dry Mixed edge
28 SKS NA 30 1 2 dry Mixed edge
29 RC NA 30 1 2 dry Mixed edge
30 RC BABO 30 1 2 dry Mixed edge
我想使用计算SES_C.分数或两个物种的共存后的值,在此通过data2
计算
group_id RC BW SKS BABO MANG
<chr> <dbl><dbl><dbl><dbl><dbl>
2-1-15-Deciduous.dry_470 1 0 0 0 0
2-1-15-Evergreen.dry_1850 0 1 0 0 0
2-1-15-Evergreen.dry_2020 1 1 0 0 0
2-1-23-Semi-Deciduous.dry_1000 0 0 1 0 0
2-1-23-Semi-Deciduous.dry_1310 0 0 1 0 0
2-1-23-Open.dry_1745 1 0 0 0 0
2-1-25-Evergreen.dry_1805 1 1 0 0 0
2-1-25-Evergreen.dry_2050 1 0 0 0 0
2-1-29-Mixed.dry_750 1 0 0 1 0
2-1-29-Evergreen.dry_1958 1 0 0 0 1
data2 <- data2[,2:6]
nperm <- 1000
outpath <- getwd()
Cscore <- ecospat.Cscore(data2, nperm, outpath, verbose = T)
当运行Cscore
时,您会得到一个带有SES_C.score的表输出。
Sp1 Sp2 obs.C.score exp.C.score SES_Cscore pval_less pval_greater
<chr> <chr> <int> <int> <dbl> <dbl> <dbl>
RC BW 5 5 -0.8079579 0.4845155 0.9520480
RC SKS 14 6 1.5873256 1.0000000 0.2317682
RC BABO 0 7 -1.0829308 0.4605395 1.0000000
RC MANG 0 0 -1.1117101 0.4475524 1.0000000
BW SKS 6 6 0.5844538 1.0000000 0.7442557
BW BABO 3 3 0.3143282 1.0000000 0.9100899
BW MANG 3 3 0.3914705 1.0000000 0.8671329
SKS BABO 2 2 0.2699785 1.0000000 0.9320679
SKS MANG 2 2 0.2804816 1.0000000 0.9270729
BABO MANG 1 1 0.1903501 1.0000000 0.9650350
我想将物种对之间的值合并到data1
中,因此输出为
Species Association Day month year season cover evi Cscore
<fctr> <chr> <dbl> <dbl> <dbl> <chr> <chr> <chr> <dbl>
21 BW RC 22 1 2 dry Evergreen edge -0.8079579
22 MANG RC 22 1 2 dry Evergreen edge -1.1117101
23 RC BW 22 1 2 dry Evergreen edge -0.8079579
24 RC SKS 22 1 2 dry Evergreen edge 1.5873256
25 RC NA 22 1 2 dry Mixed edge NA
26 SKS MANGA 22 1 2 dry Evergreen edge 0.2804816
27 RC NA 30 1 2 dry Mixed edge NA
28 SKS NA 30 1 2 dry Mixed edge NA
29 RC NA 30 1 2 dry Mixed edge NA
30 RC BABO 30 1 2 dry Mixed edge -1.0829308
当我按照建议运行merge
时,它在一定程度上可以工作,但不能像我需要的那样读取我的表。例如,RC
作为物种和BABO
作为关联的Cscore
与BABO
在物种和RC
在关联中相同。
数据:
data1 <- data.frame(
Species = factor(
c("BW", "MANG", "RC", "RC", "RC", "SKS", "RC", "SKS", "RC", "RC"),
levels = c("BABO", "BW", "MANG", "RC", "SKS")
),
Association = c("RC", "RC", "BW", "SKS", NA, "MANG", NA, NA, NA, "BABO"),
Day = c(22, 22, 22, 22, 22, 22, 30, 30, 30, 30),
month = c(1, 1, 1, 1, 1, 1, 1, 1, 1, 1),
year = c(2, 2, 2, 2, 2, 2, 2, 2, 2, 2),
season = c(
"dry", "dry", "dry", "dry", "dry", "dry", "dry", "dry", "dry",
"dry"
),
cover = c(
"Evergreen", "Evergreen", "Evergreen", "Evergreen", "Mixed",
"Evergreen", "Mixed", "Mixed", "Mixed", "Mixed"
),
evi = c(
"edge", "edge", "edge", "edge", "edge", "edge", "edge", "edge",
"edge", "edge"
),
row.names = 21:30
)
data2 <- tibble::tribble(
~group_id, ~RC, ~BW, ~SKS, ~BABO, ~MANG,
"2-1-15-Deciduous.dry_470", 1, 0, 0, 0, 0,
"2-1-15-Evergreen.dry_1850", 0, 1, 0, 0, 0,
"2-1-15-Evergreen.dry_2020", 1, 1, 0, 0, 0,
"2-1-23-Semi-Deciduous.dry_1000", 0, 0, 1, 0, 0,
"2-1-23-Semi-Deciduous.dry_1310", 0, 0, 1, 0, 0,
"2-1-23-Open.dry_1745", 1, 0, 0, 0, 0,
"2-1-25-Evergreen.dry_1805", 1, 1, 0, 0, 0,
"2-1-25-Evergreen.dry_2050", 1, 0, 0, 0, 0,
"2-1-29-Mixed.dry_750", 1, 0, 0, 1, 0,
"2-1-29-Evergreen.dry_1958", 1, 0, 0, 0, 1,
)
1条答案
按热度按时间rjee0c151#
您可以使用
read.table
读取文本文件中的分数(这假设您的工作目录与outpath
参数使用的目录相同)。my_scores
data.frame应该如下所示,包含物种对的C-score索引值:然后,您可以使用
merge
返回到数据集,指示merge
针对两个data. frame中的每一个的列。all.x
将保留第一个data.framedata1
的所有列。最终结果如下。只有3对完全匹配(RC/BABO、RC/BW和RC/SKS)。
编辑:若要按物种“pair”(RC/BABO或BABO/RC)合并,可以新建一列定义该对(按字母顺序排列),然后在新的“pair”列上合并。
请注意,
Species
已从因子转换为字符,以便在创建新字符species_pair
列时使用。输出