出现重复值并返回由R中的逗号分隔的唯一值

时间:2017-07-23 10:46:56

标签: r dataframe

我在R

中有以下数据框
 Number      ship_no
  4432          1
  4432          2
  4564          1
  4389          5
  6578          6
  4389          3
  4355          10
  4355          10

我想找到在唯一Number

中重复的重复ship_no
 Number       ship_no
  4432          1,2
  4389          5,3
  4355          10

我怎样才能在r?

中这样做

我尝试在R

中使用代码
library(dplyr)
group_by(Number) %>%
filter(duplicated(Number)) %>%
summarize(Number = paste0(unique(ship_no), collapse = ','))

4 个答案:

答案 0 :(得分:2)

你可以这样做:

providerName="Npgsql"

答案 1 :(得分:1)

为什么您的解决方案不起作用

声明

filter(duplicated(Number))

您只保留与之前遇到的行重复的行:

duplicated(df$Number)
[1] FALSE  TRUE FALSE FALSE FALSE  TRUE

使用data.table的解决方案1 ​​

library(data.table)
dt = data.table(df)
dt[,if(.N>1).(ship_no=list(ship_no)),Number]

解决方案2使用dplyr

您可以将重复的语句与另一个重复的语句fromLast=False结合使用,如下所示:

df = read.table(text="Number      ship_no
4432          1
4432          2
4564          1
4389          5
6578          6
4389          3",header=T)

library(dplyr)
df %>% group_by(Number) %>%
  filter(duplicated(Number) | duplicated(Number,fromLast=TRUE)) %>%
  summarize(ship_no = paste0(unique(ship_no), collapse = ','))

答案 2 :(得分:1)

在基础R中,您可以使用aggrgatelapply三行执行此操作。它将生成一个data.frame,其中第二个参数是一个包含重复值向量的列表。

# collect ship_nos for each Number into single column
mydf <- aggregate(ship_no ~ Number, data=dat, c)
# drop rows without multiple ship_nos
mydf <- mydf[lengths(mydf[["ship_no"]]) > 1,]
# sort values in ship_no columns and drop any duplicates within each list item
mydf[["ship_no"]] <- lapply(mydf[["ship_no"]],
                            function(x) sort(x[!duplicated(x)]))

返回

mydf
  Number ship_no
1   4355      10
2   4389    3, 5
3   4432    1, 2

答案 3 :(得分:1)

以下是使用from django.contrib.auth.models import User class LoginViewsTests(TestCase): def setUp(self): self.adminuser = User.objects.create_user('test_001', 'test001@test.com', 'test1234')

的选项
data.table