楼主: X光头
3047 6

[问答] 数据框如何删除含特殊值的行? [推广有奖]

  • 0关注
  • 0粉丝

初中生

52%

还不是VIP/贵宾

-

威望
0
论坛币
21 个
通用积分
1.0000
学术水平
0 点
热心指数
0 点
信用等级
0 点
经验
168 点
帖子
7
精华
0
在线时间
25 小时
注册时间
2018-2-6
最后登录
2021-2-1

楼主
X光头 发表于 2020-2-27 10:17:03 |AI写论文

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

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

经管之家联合CDA

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

感谢您参与论坛问题回答

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

+2 论坛币
比如说我的数据中缺失值表示为-9,就像下面的数据
V1V2V3V4
12-93
4-956
78910
11121314

现在我想要删掉包含-9的第一和第二行,应该怎么做呢?
二维码

扫码加我 拉你入群

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

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


沙发
caozhaowen 在职认证  发表于 2020-2-27 11:35:02

用dplyr包中的filter可以实现。但是也许有更好的方法。

library(xlsx2dfs)
df=read.xlsx("tes.xlsx")  
df 
str(df)  
library(dplyr)
df <- df %>% filter(V2!=-9,V3!=-9)
df
已有 1 人评分论坛币 收起 理由
cheetahfly + 10 热心帮助其他会员

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

藤椅
caozhaowen 在职认证  发表于 2020-2-27 11:50:03
caozhaowen 发表于 2020-2-27 11:35
用dplyr包中的filter可以实现。但是也许有更好的方法。
library(xlsx2dfs)
df=read.xlsx("tes.xlsx")
用dplyr包中的filter可以实现。但是也许有更好的方法。
library(xlsx2dfs)
## Loading required package: openxlsx
df=read.xlsx("tes.xlsx")  
df
##   V1 V2 V3 V4
## 1  1  2 -9  3
## 2  4 -9  5  6
## 3  7  8  9 10
## 4 11 12 13 14
str(df)  
## 'data.frame':    4 obs. of  4 variables:
##  $ V1: num  1 4 7 11
##  $ V2: num  2 -9 8 12
##  $ V3: num  -9 5 9 13
##  $ V4: num  3 6 10 14
library(dplyr)
##
## Attaching package: 'dplyr'
## The following objects are masked from 'package:stats':
##
##     filter, lag
## The following objects are masked from 'package:base':
##
##     intersect, setdiff, setequal, union
df <- df %>% filter(V2!=-9,V3!=-9)
df
##   V1 V2 V3 V4
## 1  7  8  9 10
## 2 11 12 13 14

板凳
X光头 发表于 2020-2-27 14:59:18
caozhaowen 发表于 2020-2-27 11:50
用dplyr包中的filter可以实现。但是也许有更好的方法。
library(xlsx2dfs)
## Loading required packag ...
感谢你的回复!
那如果数据非常大,而我不知道那些列里包含-9,应该怎么办呢?

报纸
caozhaowen 在职认证  发表于 2020-2-27 20:04:24
X光头 发表于 2020-2-27 14:59
感谢你的回复!
那如果数据非常大,而我不知道那些列里包含-9,应该怎么办呢?
  1. library(xlsx2dfs)
  2. library(dplyr)
  3. df=read.xlsx("tes.xlsx")  
  4. df
  5. #变量名字改成小写算了,方便
  6. names(df) <- c("v1","v2","v3","v4")
  7. #找到应删除的位置
  8. df_filter <- (data.frame(torf <- (df+9)==0 )%>%
  9.   mutate(sum=v1+v2+v3+v4))["sum"]
  10. #先合并,再筛选,然后选出需要的部分
  11. result <- bind_cols(df,df_filter) %>%
  12.   filter(sum==0) %>%
  13.   select(-sum)
  14. result
复制代码


library(xlsx2dfs)
## Loading required package: openxlsx
library(dplyr)
##
## Attaching package: 'dplyr'
## The following objects are masked from 'package:stats':
##
##     filter, lag
## The following objects are masked from 'package:base':
##
##     intersect, setdiff, setequal, union
df=read.xlsx("tes.xlsx")  
df
##   V1 V2 V3 V4
## 1  1  2 -9  3
## 2  4 -9  5  6
## 3  7  8  9 10
## 4 11 12 13 14
#变量名字改成小写算了,方便
names(df) <- c("v1","v2","v3","v4")
#找到应删除的位置
df_filter <- (data.frame(torf <- (df+9)==0 )%>%
  mutate(sum=v1+v2+v3+v4))["sum"]
#先合并,再筛选,然后选出需要的部分
result <- bind_cols(df,df_filter) %>%
  filter(sum==0) %>%
  select(-sum)
result
##   v1 v2 v3 v4
## 1  7  8  9 10
## 2 11 12 13 14
已有 2 人评分论坛币 学术水平 热心指数 信用等级 收起 理由
cheetahfly + 10 精彩帖子
Sunknownay + 2 + 2 + 2 热心帮助其他会员

总评分: 论坛币 + 10  学术水平 + 2  热心指数 + 2  信用等级 + 2   查看全部评分

地板
X光头 发表于 2020-2-29 15:21:58
caozhaowen 发表于 2020-2-27 20:04
library(xlsx2dfs)
## Loading required package: openxlsx
library(dplyr)
非常感谢!

7
nieqiang110 学生认证  发表于 2020-3-20 17:49:55
读入数据时,设定na.strings="-9",然后删掉缺省值,试试
已有 1 人评分论坛币 收起 理由
cheetahfly + 10 精彩帖子

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

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

本版微信群
加好友,备注cda
拉您进交流群
GMT+8, 2026-2-8 06:26