How to create a loop with multiple condition statements and groupings in R?

I have a large dataset (df), which looks something like this (simplified to not include all bioclimatic variables, but just imagine six columns rather than two beginning with “bio”):

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
<code> name longitude latitude time_bp bio01 bio12
1 Species A 24.633301 -27.61670 0 18.5594425 467.2066
2 Species A 25.549999 -28.66670 0 17.1183109 487.5667
3 Species A 29.083300 25.80000 0 21.7980595 28.1200
4 Species B 23.033300 -28.20560 0 17.4872379 398.5200
5 Species B 25.500000 23.00000 0 21.3069401 72.9600
6 Species C 24.633301 -27.61670 0 18.5594425 467.2066
7 Species B 29.600000 -0.13500 0 23.3799686 973.3167
8 Species C 33.750000 16.25000 0 28.5797062 137.5567
9 Species A 33.750000 16.25000 0 28.5797062 137.5567
10 Species C 33.750000 16.25000 0 28.5797062 137.5567
11 Species D 33.750000 16.25000 0 28.5797062 137.5567
12 Species D 33.750000 16.25000 0 28.5797062 137.5567
13 Species A 33.750000 16.25000 0 28.5797062 137.5567
14 Species B 33.750000 16.25000 0 28.5797062 137.5567
15 Species E 33.750000 16.25000 0 28.5797062 137.5567
</code>
<code> name longitude latitude time_bp bio01 bio12 1 Species A 24.633301 -27.61670 0 18.5594425 467.2066 2 Species A 25.549999 -28.66670 0 17.1183109 487.5667 3 Species A 29.083300 25.80000 0 21.7980595 28.1200 4 Species B 23.033300 -28.20560 0 17.4872379 398.5200 5 Species B 25.500000 23.00000 0 21.3069401 72.9600 6 Species C 24.633301 -27.61670 0 18.5594425 467.2066 7 Species B 29.600000 -0.13500 0 23.3799686 973.3167 8 Species C 33.750000 16.25000 0 28.5797062 137.5567 9 Species A 33.750000 16.25000 0 28.5797062 137.5567 10 Species C 33.750000 16.25000 0 28.5797062 137.5567 11 Species D 33.750000 16.25000 0 28.5797062 137.5567 12 Species D 33.750000 16.25000 0 28.5797062 137.5567 13 Species A 33.750000 16.25000 0 28.5797062 137.5567 14 Species B 33.750000 16.25000 0 28.5797062 137.5567 15 Species E 33.750000 16.25000 0 28.5797062 137.5567 </code>
                        name   longitude  latitude time_bp       bio01     bio12
1           Species A          24.633301 -27.61670       0  18.5594425  467.2066
2           Species A          25.549999 -28.66670       0  17.1183109  487.5667
3           Species A          29.083300  25.80000       0  21.7980595   28.1200
4           Species B          23.033300 -28.20560       0  17.4872379  398.5200
5           Species B          25.500000  23.00000       0  21.3069401   72.9600
6           Species C          24.633301 -27.61670       0  18.5594425  467.2066
7           Species B          29.600000  -0.13500       0  23.3799686  973.3167
8           Species C          33.750000  16.25000       0  28.5797062  137.5567
9           Species A          33.750000  16.25000       0  28.5797062  137.5567
10          Species C          33.750000  16.25000       0  28.5797062  137.5567
11          Species D          33.750000  16.25000       0  28.5797062  137.5567
12          Species D          33.750000  16.25000       0  28.5797062  137.5567
13          Species A          33.750000  16.25000       0  28.5797062  137.5567
14          Species B          33.750000  16.25000       0  28.5797062  137.5567
15          Species E          33.750000  16.25000       0  28.5797062  137.5567

With multiple time stamps, species, and locations. I am interested in measuring climatic niche breadth. Because the temporal resolution of my data is coarser than my climatic data, I want to average the climatic data, I am averaging the climatic data for multiple time stamps. Most of the time, if there is data for one time stamp, there is data for all of them, but that is not always the case. There are also several cases where there is no data for a species at all or most time stamps, or where the multiple points fall within the same grid, and thus have the same bioclimatic information. I am excluding species which do not have at least five points with unique bioclimatic data. Thus far I have been going through each species manually to see whether there are five unique points, and then doing the following:

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
<code>Splitdf <- split(df, df$name)
SpeciesADat <- Splitdf $`Species A`
SpeciesADat <- split(SpeciesADat, SpeciesADat $latitude)
SpeciesADatBio01List <- c(mean(SpeciesADat$`42.611382`$bio01, na.arm = TRUE),
mean(SpeciesADat$`-44.457764`$bio01, na.arm = TRUE),
mean(SpeciesADat$`-44.450432`$bio01, na.arm = TRUE),
mean(SpeciesADat$`-44.223461`$bio01, na.arm = TRUE),
mean(SpeciesADat$`-44.185169`$bio01, na.arm = TRUE))
SpeciesADatBio01List <- na.omit(SpeciesADatBio01List)
SpeciesADatB01Breadth <- max(SpeciesADatBio01List) - min(SpeciesADatBio01List)
SpeciesADatBi012List <- c(mean(SpeciesADat$`42.611382`$bio12, na.arm = TRUE),
mean(SpeciesADat$`-44.457764`$bio12, na.arm = TRUE),
mean(SpeciesADat$`-44.450432`$bio12, na.arm = TRUE),
mean(SpeciesADat$`-44.223461`$bio12, na.arm = TRUE),
mean(SpeciesADat$`-44.185169`$bio12, na.arm = TRUE))
SpeciesADatBi012List <- na.omit(SpeciesADatBi012List)
SpeciesADatB012Breadth <- max(SpeciesADatBi012List)-min(SpeciesADatBi012List)
SpeciesAData <- data.frame(Bio01Breadth=c(SpeciesADatB01Breadth),
Bio12Breadth=c(SpeciesADatB012Breadth),
Species=c("Species A"))
</code>
<code>Splitdf <- split(df, df$name) SpeciesADat <- Splitdf $`Species A` SpeciesADat <- split(SpeciesADat, SpeciesADat $latitude) SpeciesADatBio01List <- c(mean(SpeciesADat$`42.611382`$bio01, na.arm = TRUE), mean(SpeciesADat$`-44.457764`$bio01, na.arm = TRUE), mean(SpeciesADat$`-44.450432`$bio01, na.arm = TRUE), mean(SpeciesADat$`-44.223461`$bio01, na.arm = TRUE), mean(SpeciesADat$`-44.185169`$bio01, na.arm = TRUE)) SpeciesADatBio01List <- na.omit(SpeciesADatBio01List) SpeciesADatB01Breadth <- max(SpeciesADatBio01List) - min(SpeciesADatBio01List) SpeciesADatBi012List <- c(mean(SpeciesADat$`42.611382`$bio12, na.arm = TRUE), mean(SpeciesADat$`-44.457764`$bio12, na.arm = TRUE), mean(SpeciesADat$`-44.450432`$bio12, na.arm = TRUE), mean(SpeciesADat$`-44.223461`$bio12, na.arm = TRUE), mean(SpeciesADat$`-44.185169`$bio12, na.arm = TRUE)) SpeciesADatBi012List <- na.omit(SpeciesADatBi012List) SpeciesADatB012Breadth <- max(SpeciesADatBi012List)-min(SpeciesADatBi012List) SpeciesAData <- data.frame(Bio01Breadth=c(SpeciesADatB01Breadth), Bio12Breadth=c(SpeciesADatB012Breadth), Species=c("Species A")) </code>
Splitdf <- split(df, df$name)

SpeciesADat <- Splitdf $`Species A`
SpeciesADat <- split(SpeciesADat, SpeciesADat $latitude)
SpeciesADatBio01List <- c(mean(SpeciesADat$`42.611382`$bio01, na.arm = TRUE),
                          mean(SpeciesADat$`-44.457764`$bio01, na.arm = TRUE),
                          mean(SpeciesADat$`-44.450432`$bio01, na.arm = TRUE),
                          mean(SpeciesADat$`-44.223461`$bio01, na.arm = TRUE),
                          mean(SpeciesADat$`-44.185169`$bio01, na.arm = TRUE))
SpeciesADatBio01List <- na.omit(SpeciesADatBio01List)
SpeciesADatB01Breadth <- max(SpeciesADatBio01List) - min(SpeciesADatBio01List)
SpeciesADatBi012List <- c(mean(SpeciesADat$`42.611382`$bio12, na.arm = TRUE),
                                mean(SpeciesADat$`-44.457764`$bio12, na.arm = TRUE),
                                mean(SpeciesADat$`-44.450432`$bio12, na.arm = TRUE),
                                mean(SpeciesADat$`-44.223461`$bio12, na.arm = TRUE),
                                mean(SpeciesADat$`-44.185169`$bio12, na.arm = TRUE))
SpeciesADatBi012List <- na.omit(SpeciesADatBi012List)
SpeciesADatB012Breadth <- max(SpeciesADatBi012List)-min(SpeciesADatBi012List)
SpeciesAData <- data.frame(Bio01Breadth=c(SpeciesADatB01Breadth),
                           Bio12Breadth=c(SpeciesADatB012Breadth),
                           Species=c("Species A"))

With the plan of merging the various SpeciesXData data frames which I create for each species to have a final product that looks like this:

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
<code> Bio01Breadth Bio12Breadth Species
1 32.9588 1912.312 Species A
2 3.878775 248.6758 Species B
3 29.51849 840.4629 Species C
</code>
<code> Bio01Breadth Bio12Breadth Species 1 32.9588 1912.312 Species A 2 3.878775 248.6758 Species B 3 29.51849 840.4629 Species C </code>
  Bio01Breadth Bio12Breadth            Species
1      32.9588     1912.312          Species A
2      3.878775    248.6758          Species B
3      29.51849    840.4629          Species C                                              

Is there a way to automate this process, so I can go through all species with one loop while also cleaning the data in that loop?

Trang chủ Giới thiệu Sinh nhật bé trai Sinh nhật bé gái Tổ chức sự kiện Biểu diễn giải trí Dịch vụ khác Trang trí tiệc cưới Tổ chức khai trương Tư vấn dịch vụ Thư viện ảnh Tin tức - sự kiện Liên hệ Chú hề sinh nhật Trang trí YEAR END PARTY công ty Trang trí tất niên cuối năm Trang trí tất niên xu hướng mới nhất Trang trí sinh nhật bé trai Hải Đăng Trang trí sinh nhật bé Khánh Vân Trang trí sinh nhật Bích Ngân Trang trí sinh nhật bé Thanh Trang Thuê ông già Noel phát quà Biểu diễn xiếc khỉ Xiếc quay đĩa Dịch vụ tổ chức sự kiện 5 sao Thông tin về chúng tôi Dịch vụ sinh nhật bé trai Dịch vụ sinh nhật bé gái Sự kiện trọn gói Các tiết mục giải trí Dịch vụ bổ trợ Tiệc cưới sang trọng Dịch vụ khai trương Tư vấn tổ chức sự kiện Hình ảnh sự kiện Cập nhật tin tức Liên hệ ngay Thuê chú hề chuyên nghiệp Tiệc tất niên cho công ty Trang trí tiệc cuối năm Tiệc tất niên độc đáo Sinh nhật bé Hải Đăng Sinh nhật đáng yêu bé Khánh Vân Sinh nhật sang trọng Bích Ngân Tiệc sinh nhật bé Thanh Trang Dịch vụ ông già Noel Xiếc thú vui nhộn Biểu diễn xiếc quay đĩa Dịch vụ tổ chức tiệc uy tín Khám phá dịch vụ của chúng tôi Tiệc sinh nhật cho bé trai Trang trí tiệc cho bé gái Gói sự kiện chuyên nghiệp Chương trình giải trí hấp dẫn Dịch vụ hỗ trợ sự kiện Trang trí tiệc cưới đẹp Khởi đầu thành công với khai trương Chuyên gia tư vấn sự kiện Xem ảnh các sự kiện đẹp Tin mới về sự kiện Kết nối với đội ngũ chuyên gia Chú hề vui nhộn cho tiệc sinh nhật Ý tưởng tiệc cuối năm Tất niên độc đáo Trang trí tiệc hiện đại Tổ chức sinh nhật cho Hải Đăng Sinh nhật độc quyền Khánh Vân Phong cách tiệc Bích Ngân Trang trí tiệc bé Thanh Trang Thuê dịch vụ ông già Noel chuyên nghiệp Xem xiếc khỉ đặc sắc Xiếc quay đĩa thú vị
Trang chủ Giới thiệu Sinh nhật bé trai Sinh nhật bé gái Tổ chức sự kiện Biểu diễn giải trí Dịch vụ khác Trang trí tiệc cưới Tổ chức khai trương Tư vấn dịch vụ Thư viện ảnh Tin tức - sự kiện Liên hệ Chú hề sinh nhật Trang trí YEAR END PARTY công ty Trang trí tất niên cuối năm Trang trí tất niên xu hướng mới nhất Trang trí sinh nhật bé trai Hải Đăng Trang trí sinh nhật bé Khánh Vân Trang trí sinh nhật Bích Ngân Trang trí sinh nhật bé Thanh Trang Thuê ông già Noel phát quà Biểu diễn xiếc khỉ Xiếc quay đĩa
Thiết kế website Thiết kế website Thiết kế website Cách kháng tài khoản quảng cáo Mua bán Fanpage Facebook Dịch vụ SEO Tổ chức sinh nhật