替换数据框中的列值,不包括在列表中

Nik*_*kov 2 r

我在R中有一个data.frame,如下所示:

fruits
   X1  X2     X3
   aa  kiwi  15
   ba  orange 25
   cc  lemon  23
   ba  apple  17
   cc  lemon  19
   cc  orange  18
   cc  orange 21
   ba  banana  17
Run Code Online (Sandbox Code Playgroud)

我想替换列X2中除"橙色"和"柠檬"与"其他"之外的所有值.如何在R中做到?

示例数据:

fruits <- structure(list(X1 = structure(c(1L, 2L, 3L, 2L, 3L, 3L, 3L, 2L
), .Label = c("aa", "ba", "cc"), class = "factor"), X2 = structure(c(3L, 
5L, 4L, 1L, 4L, 5L, 5L, 2L), .Label = c("apple", "banana", "kiwi", 
"lemon", "orange"), class = "factor"), X3 = c(15L, 25L, 23L, 
17L, 19L, 18L, 21L, 17L)), .Names = c("X1", "X2", "X3"), class = "data.frame", row.names = c(NA, 
-8L))
Run Code Online (Sandbox Code Playgroud)

Nic*_*bbe 5

首先创建一个变量,指示要更改的行.你可以这样做,例如:

shouldBecomeOther<-!(fruits$X2 %in% c("orange", "lemon"))
Run Code Online (Sandbox Code Playgroud)

然后使用该索引器:

fruits$X2[shouldBecomeOther]<- "other"
Run Code Online (Sandbox Code Playgroud)

请注意,如果列是一个因素(极有可能),则需要更多工作,如下所示:

tmp<-as.character(fruits$x2)
tmp[shouldBecomeOther]<-"other"
fruits$x2<-factor(tmp)
Run Code Online (Sandbox Code Playgroud)