我需要合并两个数据帧: Complete10和INSIDECostaRica。在哥斯达黎加内部,Complete10中包含的数据子集是相同的,但某些特定的丰富度值从0更改为0.5 (以便我可以在后面对这些数据进行筛选)。我尝试了几种合并它们的方法,但是保持我的行为0.5的唯一方法似乎是使用all=TRUE,这意味着我最终得到了这些行的副本,0行和0.5行。我想使用distinct函数删除在0.5行中复制的值为0的行,但我认为这将删除我的0.5行,因为合并将这些值附加到数据集的末尾。例如,这就是我的合并的样子,这就是合并之后的情况:
MergeTest<-merge(Complete10,INSIDECostaRica,by=c("GRID","x.centroids","y.centroids","RICHNESS"),all=TRUE)
GRID LONG LAT RICHNESS
75 5 6 0
75 5 6 0.5
76 8 4 12
77 2 7 0
78 4 3 0
78 4 3 0.5这就是我想要的:
GRID LONG LAT RICHNESS
75 5 6 0.5
76 8 4 12
77 2 7 0
78 4 3 0.5我不想从丰富度中删除所有的零,只是那些重复的0.5。
发布于 2020-12-14 04:44:12
这样就能完成任务了
library(tidyverse)
MergeTest %>% group_by(GRID, LONG, LAT) %>% arrange(RICHNESS) %>% slice_tail()
# A tibble: 4 x 4
# Groups: GRID, LONG, LAT [4]
GRID LONG LAT RICHNESS
<int> <int> <int> <dbl>
1 75 5 6 0.5
2 76 8 4 12
3 77 2 7 0
4 78 4 3 0.5或
MergeTest %>% group_by(GRID, LONG, LAT) %>% filter(!(n()>1 & RICHNESS == 0))
# A tibble: 4 x 4
# Groups: GRID, LONG, LAT [4]
GRID LONG LAT RICHNESS
<int> <int> <int> <dbl>
1 75 5 6 0.5
2 76 8 4 12
3 77 2 7 0
4 78 4 3 0.5样本dput
> dput(MergeTest)
structure(list(GRID = c(75L, 75L, 76L, 77L, 78L, 78L), LONG = c(5L,
5L, 8L, 2L, 4L, 4L), LAT = c(6L, 6L, 4L, 7L, 3L, 3L), RICHNESS = c(0,
0.5, 12, 0, 0, 0.5)), class = "data.frame", row.names = c(NA,
-6L))发布于 2020-12-14 04:45:36
合并后的一种方法是为每个组保留RICHNESS的最大值。
library(dplyr)
result <- MergeTest %>%
group_by(GRID, LONG, LAT) %>%
slice(which.max(RICHNESS))如果希望将merge列的值仅从INSIDECostaRica中删除,则可以从Complete10中删除它的值。
MergeTest<-merge(Complete10[setdiff(names(Complete10), 'RICHNESS')],
INSIDECostaRica,by=c("GRID","x.centroids","y.centroids"))https://stackoverflow.com/questions/65283668
复制相似问题