首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >移除第二重复行

移除第二重复行
EN

Stack Overflow用户
提问于 2020-12-14 04:37:19
回答 2查看 37关注 0票数 0

我需要合并两个数据帧: Complete10和INSIDECostaRica。在哥斯达黎加内部,Complete10中包含的数据子集是相同的,但某些特定的丰富度值从0更改为0.5 (以便我可以在后面对这些数据进行筛选)。我尝试了几种合并它们的方法,但是保持我的行为0.5的唯一方法似乎是使用all=TRUE,这意味着我最终得到了这些行的副本,0行和0.5行。我想使用distinct函数删除在0.5行中复制的值为0的行,但我认为这将删除我的0.5行,因为合并将这些值附加到数据集的末尾。例如,这就是我的合并的样子,这就是合并之后的情况:

代码语言:javascript
复制
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

这就是我想要的:

代码语言:javascript
复制
GRID   LONG   LAT   RICHNESS
75      5      6     0.5
76      8      4     12
77      2      7     0
78      4      3     0.5

我不想从丰富度中删除所有的零,只是那些重复的0.5。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-12-14 04:44:12

这样就能完成任务了

代码语言:javascript
复制
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

代码语言:javascript
复制
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

代码语言:javascript
复制
> 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))
票数 0
EN

Stack Overflow用户

发布于 2020-12-14 04:45:36

合并后的一种方法是为每个组保留RICHNESS的最大值。

代码语言:javascript
复制
library(dplyr)
result <- MergeTest %>%
            group_by(GRID, LONG, LAT) %>%
            slice(which.max(RICHNESS))

如果希望将merge列的值仅从INSIDECostaRica中删除,则可以从Complete10中删除它的值。

代码语言:javascript
复制
MergeTest<-merge(Complete10[setdiff(names(Complete10), 'RICHNESS')],
                INSIDECostaRica,by=c("GRID","x.centroids","y.centroids"))
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65283668

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档