2017-02-15 65 views
0

我有一个很大的数据框,有很多我想要清理的字符串值。有条件的数据帧突变

例子:

students <- data.frame(name = c("John", "Jerry", "Bill", "Tom", "Mary", "Bill"), 
         class = c("A", "B", "-", "#NA", "A", "low"), stringsAsFactors = FALSE) 

我希望每一个学生谁不是在A类,B或C设置为D. 我目前的解决办法是:

'%!in%' <- function(x,y)!('%in%'(x,y)) 
for(i in 1:nrow(students)) { 
    if(students$class[i] %!in% c("A", "B", "C")) { 
    students$class[i] <- "D" 
    } 
} 

有没有更好的解决方案比这个,最好有管道,因为有像这样的列数?

谢谢! !

+0

另一种方式是通过'replace','$学生类<我们可以做到这一点没有环 - 更换(以%C $学生类,学生类$%( “A”,“B”,“C”),“D”)或'ifelse','students $ class < - ifelse(students%class%in%c(“A”,“B”,“C “),学生$ class,”D“)' –

+0

或者非常类似'students%>%mutate(class = if_else(class%in%LETTERS [1:3],class,”D“))' – Axeman

+0

另请参阅' forcats :: fct_other'。 – Axeman

回答

1

为分配矢量

students$class[students$class %!in% c("A", "B", "C")] <- "D" 
students 
# name class 
#1 John  A 
#2 Jerry  B 
#3 Bill  D 
#4 Tom  D 
#5 Mary  A 
#6 Bill  D