删除行而不过滤其他值

时间:2018-11-29 00:28:51

标签: r dplyr subset

说我有一个像这样的数据框:

NAME    YEAR      PERCENTAGE
A       2001        NA
A       2002        NA
A       2003        5.0
B       2001        3.3 
B       2002        2.3 
B       2003        NA 

我想通过选择特定行来删除带有NA的行:

NAME    YEAR      PERCENTAGE
A       2003        5.0
B       2001        3.3 
B       2002        2.3 

然后将B更改为A,预期输出如下:

NAME    YEAR      PERCENTAGE
A       2001        3.3 
A       2002        2.3 
A       2003        5.0

我尝试了subset(),但是由于我有其他值,因此它将过滤应保留的其他值。

2 个答案:

答案 0 :(得分:4)

使用库 dplyr ,您可以访问多个函数(例如 filter() arrange() mutate( )),使您能够修改数据框:

# the dataframe    
df <- data.frame(
      NAME = rep(c('A', 'B'), each = 3),
      YEAR = rep(2001:2003, length = 6),
      PERC = c(NA, NA, 5, 3.3, 2.3, NA)
    )

# load the library
library(dplyr)


df %>% 
  filter(!is.na(PERC)) %>%                         # filter missing values
  arrange(YEAR) %>%                                # order according YEAR
  mutate(NAME = replace(NAME, NAME == 'B', 'A'))   # change values

# result
  NAME YEAR PERC
1    A 2001  3.3
2    A 2002  2.3
3    A 2003  5.0

答案 1 :(得分:1)

假设您的数据帧称为df

library(dplyr)

df %>% na.omit() %>% mutate(NAME = "A")

结果:

  NAME YEAR PERC
1    A 2003  5.0
2    A 2001  3.3
3    A 2002  2.3