我在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 = ','))
答案 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中,您可以使用aggrgate
和lapply
三行执行此操作。它将生成一个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