2017-02-15 45 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