楼主: yilence
6500 11

[问答] 去除一列数据中出现次数只有一次的数据 [推广有奖]

  • 6关注
  • 1粉丝

已卖:1369份资源

博士生

34%

还不是VIP/贵宾

-

威望
0
论坛币
11895 个
通用积分
5.9355
学术水平
26 点
热心指数
24 点
信用等级
22 点
经验
15004 点
帖子
229
精华
0
在线时间
301 小时
注册时间
2012-6-24
最后登录
2020-7-7

楼主
yilence 学生认证  发表于 2015-4-4 21:26:38 |AI写论文

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

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

经管之家联合CDA

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

感谢您参与论坛问题回答

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

+2 论坛币
比如我有一类数据
name,score
1,2
1,2
2,3
3,2
3,4
看第一列的数据,1和3都出现两次,2至出现一下,删除2这条记录。请教一下是否有好的方法?


二维码

扫码加我 拉你入群

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

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

关键词:score SCOR name core cor 记录

学习无止尽

沙发
hugebear 发表于 2015-4-5 03:24:32
可以写一个简单的小函数来实现操作:
  1. deleteuniquelines <- function(x) {# x为输入的数据框
  2.         stand.col <- x[, 1] # 设根据x的第一列进行删除操作
  3.         count <- table(stand.col)
  4.         if (all(count < 2)) stop("no repeated records")
  5.         else {
  6.                 ind <- sapply(stand.col, function(t) ifelse(count[as.character(t)] > 1, TRUE, FALSE))
  7.         }
  8.         return(x[ind, ])
  9. }

  10. test <- data.frame(name = c(1, 1, 2, 3, 3), score = c(2, 2, 3, 2, 4))
  11. deleteuniquelines(test)
复制代码
已有 3 人评分经验 论坛币 收起 理由
李会超 + 40 热心帮助其他会员
admin_kefu + 20 热心帮助其他会员
yilence + 5 精彩帖子

总评分: 经验 + 40  论坛币 + 25   查看全部评分

藤椅
zxn2011 发表于 2015-4-5 05:41:27
as.data.frame(table(name))结果是两列 一列是name一列是name的frequency
把frequency=1的name挑出来
delete相应的观测值

板凳
ofzhengyi 发表于 2015-4-5 15:44:43
用dplyr包实现比较简单。
library(dplyr)
dat %>% group_by(name) %>% mutate(count=n()) %>% filter(n>1) %>% select(-count)
已有 2 人评分论坛币 收起 理由
李会超 + 20 精彩帖子
yilence + 5 精彩帖子

总评分: 论坛币 + 25   查看全部评分

报纸
lanyajia 发表于 2015-4-5 17:13:04
dt=data.frame(name=c(1,1,2,3,3),score=c(2,2,3,2,4))
unique(dt)

地板
yilence 学生认证  发表于 2015-4-5 19:57:46
hugebear 发表于 2015-4-5 03:24
可以写一个简单的小函数来实现操作:
谢谢,新学了不少函数

7
yilence 学生认证  发表于 2015-4-5 19:58:19
ofzhengyi 发表于 2015-4-5 15:44
用dplyr包实现比较简单。
library(dplyr)
dat %>% group_by(name) %>% mutate(count=n()) %>% filter(n>1 ...
没用过这个包,看起来很高端

8
yilence 学生认证  发表于 2015-4-5 20:01:39
我自己也解决了一下这个问题
  1. x.table = table(x[,1])
  2. x.table = as.matrix(x.table)
  3. x.select = rownames(x.table)[which(x.table>1)]
  4. x.select = as.matrix(x.select)
  5. colnames(x.select) = "ID"
  6. data = merge(x,x.select,by.x="name",by.y="ID")
复制代码

主要思路是把出现次数大于1的名字提出来,然后join操作一下。
学习无止尽

9
yilence 学生认证  发表于 2015-4-6 22:22:32
ofzhengyi 发表于 2015-4-5 15:44
用dplyr包实现比较简单。
library(dplyr)
dat %>% group_by(name) %>% mutate(count=n()) %>% filter(n>1 ...
今天认真看了一下这个包,功能真实很强大!再次感谢~!

10
ofzhengyi 发表于 2015-4-7 11:35:10
yilence 发表于 2015-4-6 22:22
今天认真看了一下这个包,功能真实很强大!再次感谢~!
客气了。可以减少很多代码量~

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

本版微信群
加好友,备注cda
拉您进交流群
GMT+8, 2026-1-3 15:36