首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >删除R中的重复行,并将删除行的条目添加到保留的行中

删除R中的重复行,并将删除行的条目添加到保留的行中
EN

Stack Overflow用户
提问于 2020-03-17 03:05:11
回答 1查看 32关注 0票数 0

我有这样的数据:

代码语言:javascript
复制
df <-

a b c
1 2 3
1 2 4
1 2 5
1 2 9

2 3 3
2 3 4
2 3 5
2 3 9

3 4 3
3 4 4
3 4 5
3 4 9

我希望删除基于列a的重复行,但保留列c中的值,如下所示:

代码语言:javascript
复制
df2 <-

a b c c1 c2 c3
1 2 3 4  5  9
2 3 3 4  5  9
3 4 3 4  5  9

我知道如何删除重复项,如下所示:

代码语言:javascript
复制
df2 <-df[!(df$a=="1"),]

但是现在已经知道如何将值添加到保留的行中。

EN

回答 1

Stack Overflow用户

发布于 2020-03-17 03:07:14

我们可以在对dataset的行unlist进行子集设置时排除c,然后与整个'c‘列连接

代码语言:javascript
复制
c(unlist(df[!duplicated(df$a), 1:2]), c = df$c)
#  a  b c1 c2 c3 c4 
#  1  2  3  4  5  9 

如果我们需要与预期的名称相同的名称

代码语言:javascript
复制
c(unlist(df[!duplicated(df$a), 1:2]), 
      setNames(df$c, make.unique(rep('c', nrow(df)),  sep="")))
# a  b  c c1 c2 c3 
#  1  2  3  4  5  9 

使用新的示例

代码语言:javascript
复制
library(dplyr)
library(tidyr)
df2 %>% 
    group_by(a) %>%
    summarise(b = first(b), c = list(as.list(c))) %>% 
    unnest_wider(c(c))%>% 
    rename_at(vars(starts_with('.')), ~ str_c('c', seq_along(.)))
# A tibble: 2 x 6
#      a     b    c1    c2    c3    c4
#  <int> <int> <int> <int> <int> <int>
#1     1     2     3     4     5     9
#2     2     2     3     4     5     9

或使用再次更新的示例

代码语言:javascript
复制
df3 %>%
   group_by(a) %>% 
   summarise(b = first(b), c = list(as.list(c))) %>% 
   unnest_wider(c(c))%>% 
   rename_at(vars(starts_with('.')), ~ str_c('c', seq_along(.)))
# A tibble: 3 x 6
#      a     b    c1    c2    c3    c4
#  <int> <int> <int> <int> <int> <int>
#1     1     2     3     4     5     9
#2     2     3     3     4     5     9
#3     3     4     3     4     5     9

或使用data.table

代码语言:javascript
复制
library(data.table)
setDT(df3)[, c(.(b = first(b)),  
       as.data.frame.list(setNames(c, rep('c', .N)))), a] 
#    a b c c.1 c.2 c.3
#1: 1 2 3   4   5   9
#2: 2 3 3   4   5   9
#3: 3 4 3   4   5   9

数据

代码语言:javascript
复制
df <- structure(list(a = c(1L, 1L, 1L, 1L), b = c(2L, 3L, 3L, 4L), 
    c = c(3L, 4L, 5L, 9L)), class = "data.frame", row.names = c(NA, 
-4L))

df2 <- structure(list(a = c(1L, 1L, 1L, 1L, 2L, 2L, 2L, 2L), b = c(2L, 
3L, 3L, 4L, 2L, 3L, 3L, 4L), c = c(3L, 4L, 5L, 9L, 3L, 4L, 5L, 
9L)), class = "data.frame", row.names = c(NA, -8L))



df3 <- structure(list(a = c(1L, 1L, 1L, 1L, 2L, 2L, 2L, 2L, 3L, 3L, 
3L, 3L), b = c(2L, 2L, 2L, 2L, 3L, 3L, 3L, 3L, 4L, 4L, 4L, 4L
), c = c(3L, 4L, 5L, 9L, 3L, 4L, 5L, 9L, 3L, 4L, 5L, 9L)), class = "data.frame", row.names = c(NA, 
-12L))
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60711842

复制
相关文章

相似问题

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