gpt4 book ai didi

r - 将因素映射到数据框

转载 作者:行者123 更新时间:2023-12-04 04:06:48 25 4
gpt4 key购买 nike

我有分布在两个数据集上的采样数据。 loc描述地理位置,spe包含找到的物种。不幸的是,采样站由两个因素(cruisestation)描述,所以我需要为两个数据集构造唯一的标识符

>loc
cruise station lon lat
1 TY1 A1 53.8073 6.7836
2 TY1 3 53.7757 6.7009
3 AZ7 A1 53.7764 6.6758


>spe
cruise station species abundance
1 TY1 A1 Ensis ensis 100
2 TY1 A1 Magelona 5
3 TY1 A1 Nemertea 17
4 TY1 3 Magelona 8
5 TY1 3 Ophelia 1200
6 AZ7 A1 Ophelia 950
7 AZ7 A1 Ensis ensis 89
8 AZ7 A1 Spio 1

我需要的是添加一个唯一的标识符 ID这样
  cruise station     species abundance     ID
1 TY1 A1 Ensis ensis 100 STA0001
2 TY1 A1 Magelona 5 STA0001
3 TY1 A1 Nemertea 17 STA0001
4 TY1 3 Magelona 8 STA0002
5 TY1 3 Ophelia 1200 STA0002
6 AZ7 A1 Ophelia 950 STA0003
7 AZ7 A1 Ensis ensis 89 STA0003
8 AZ7 A1 Spio 1 STA0003

这是数据
loc<-data.frame(cruise=c("TY1","TY1","AZ7"),station=c("A1",3,"A1"),lon=c(53.8073, 53.7757, 53.7764),lat=c(6.7836, 6.7009, 6.6758))

spe<-data.frame(cruise=c(rep("TY1",5),rep("AZ7",3)),station=c(rep("A1",3),rep(3,2),rep("A1",3)),species=c("Ensis ensis", "Magelona", "Nemertea", "Magelona", "Ophelia", "Ophelia","Ensis ensis", "Spio"),abundance=c(100,5,17,8,1200,950,89,1))

然后,我为 ID构造 loc
 loc$ID<-paste("STA",formatC(1:nrow(loc),width=4,format="d",flag="0"),sep="")

但是如何将 ID映射到 spe

对于像我这样的过程程序员,我发现涉及两个嵌套循环的方式非常漂亮(如果嵌套循环可以被称为“漂亮”)。我非常确定R中的两层衬套会做得更高效,更快,但我无法弄清楚。我真的想在我的代码中增加更多美感,这真是非R。

最佳答案

实际上,我认为这是一种情况,其中基数R中的merge可以正常工作:

merge(spe, loc, all.x=TRUE)

cruise station species abundance lon lat
1 AZ7 A1 Ophelia 950 53.7764 6.6758
2 AZ7 A1 Ensis ensis 89 53.7764 6.6758
3 AZ7 A1 Spio 1 53.7764 6.6758
4 TY1 3 Magelona 8 53.7757 6.7009
5 TY1 3 Ophelia 1200 53.7757 6.7009
6 TY1 A1 Ensis ensis 100 53.8073 6.7836
7 TY1 A1 Magelona 5 53.8073 6.7836
8 TY1 A1 Nemertea 17 53.8073 6.7836

要查找唯一标识符,请使用 unique():
unique(paste(loc$cruise, loc$station, sep="-"))
[1] "TY1-A1" "TY1-3" "AZ7-A1"

关于r - 将因素映射到数据框,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11473308/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com