楼主: 湖大anchu
2721 8

[问答] R语言如何快速去掉数据框中重叠的行 [推广有奖]

  • 0关注
  • 0粉丝

初中生

4%

还不是VIP/贵宾

-

威望
0
论坛币
0 个
通用积分
0
学术水平
0 点
热心指数
0 点
信用等级
0 点
经验
39 点
帖子
4
精华
0
在线时间
18 小时
注册时间
2020-11-16
最后登录
2021-10-19

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

求职就业群
赵安豆老师微信:zhaoandou666

经管之家联合CDA

送您一个全额奖学金名额~ !

感谢您参与论坛问题回答

经管之家送您两个论坛币!

+2 论坛币
比如有个数据集:

data <- data.frame(x = c("A", "B", "C", "D"), y = c("B", "A", "D", "C"), z = c("a", "a", "b", "b"))


x y z
1A B a
2B A a
3 C D b
4 D C b


我们认为第一行和第二行在z=a时候是重复的(都是A,B),同理认为第三行和第四行在z=b时是重复的(都是C,D),因此,想去掉第二行和第四行,由于数据量很大,不能简单的利用for循环计算,请教论坛里面的大侠是否有便捷方法,在此先谢了!


二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

关键词:R语言 数据框 Data 数据集

回帖推荐

cheetahfly 发表于6楼  查看完整内容

x列和y列看上去像两个维度,其实你是想当做一个维度来处理,因此思路应该是降维,然后排序,再去重。
沙发
nieqiang110 学生认证  发表于 2020-11-17 08:49:16 |只看作者 |坛友微信交流群
dplyr::distinct函数,看看,有用

使用道具

藤椅
llb_321 在职认证  发表于 2020-11-17 13:04:04 |只看作者 |坛友微信交流群
nieqiang110 发表于 2020-11-17 08:49
dplyr::distinct函数,看看,有用

使用道具

板凳
湖大anchu 发表于 2020-11-17 18:19:11 |只看作者 |坛友微信交流群
nieqiang110 发表于 2020-11-17 08:49
dplyr::distinct函数,看看,有用
谢谢大侠的回答,我认认真真的去查看了distinct函数,它还是不能解决我这个问题。看您还有没有更好的办法,谢谢啦!

使用道具

报纸
szxship 发表于 2020-11-17 21:17:35 |只看作者 |坛友微信交流群
data <- data.frame(x = c("A", "C", "C", "D"), y = c("B", "A", "D", "C"), z = c("a", "a", "b", "b"))
  x y z
1 A B a
2 C A a
3 C D b
4 D C b
如果是这样,是要留下1,2,3行吗?

使用道具

地板
cheetahfly 在职认证  发表于 2020-11-17 22:09:02 |只看作者 |坛友微信交流群
x列和y列看上去像两个维度,其实你是想当做一个维度来处理,因此思路应该是降维,然后排序,再去重。
  1. data <- data.frame(x = c("A", "B", "C", "D"), y = c("B", "A", "D", "C"), z = c("a", "a", "b", "b"))
  2. . <- split(data[, c("x", "y")], f = 1:nrow(data))
  3. names(.) <- data$z
  4. . <- lapply(., function(x) sort(as.vector(as.matrix(x))))
  5. tmp1 <- bind_rows(lapply(., function(x) as.data.frame(t(as.matrix(x)))))
  6. tmp1 <- setNames(tmp1, c("x", "y"))
  7. tmp1$z <- names(.)
  8. out <- dplyr::distinct(tmp1)
复制代码

使用道具

7
szxship 发表于 2020-11-17 23:28:47 |只看作者 |坛友微信交流群
library(data.table)
Dt = data.table(x = c("A", "B", "C", "D"), y = c("B", "A", "D", "C"), z = c("a", "a", "b", "b"))
Ht = Dt[,lapply(.SD,function(x)sort(x)),by = z]
y = (Ht$x == Ht$y)*as.numeric(factor(Ht$z))
id = !duplicated(y)
Dt[id]

使用道具

8
湖大anchu 发表于 2020-11-18 08:52:09 |只看作者 |坛友微信交流群
cheetahfly 发表于 2020-11-17 22:09
x列和y列看上去像两个维度,其实你是想当做一个维度来处理,因此思路应该是降维,然后排序,再去重。
大神一句话,菜鸟跑半年! 非常感谢这位大侠的鼎力帮助,谢谢啦!

使用道具

9
湖大anchu 发表于 2020-11-18 13:16:41 |只看作者 |坛友微信交流群
szxship 发表于 2020-11-17 23:28
library(data.table)
Dt = data.table(x = c("A", "B", "C", "D"), y = c("B", "A", "D", "C"), z = c("a" ...
大神一句话,菜鸟跑半年! 也感谢这位大侠的鼎力帮助!在此,让我学习到两种非常简便的方法,也认识了两个重要的R包data.table和dplyr。再次感谢!

使用道具

您需要登录后才可以回帖 登录 | 我要注册

本版微信群
加好友,备注cda
拉您进交流群

京ICP备16021002-2号 京B2-20170662号 京公网安备 11010802022788号 论坛法律顾问:王进律师 知识产权保护声明   免责及隐私声明

GMT+8, 2024-5-6 16:47