0

我正在尝试清理我的数据,但找不到替换不符合我的条件的值的方法,如下例所示:

df1<-  data.frame(
A=c("a","b","c"),
Ch=c("c1","xyz","c2"),
val=paste0("x",1:3),  stringsAsFactors = FALSE)

所有不同于 c1、c2 的值我想更改为“其他”。

我试过了:

for( i in 1:length(df)
if (df[i,2]==c1 | c2){
stay same vaue?!?
} else df[i,2] <- "other"

这没有用。

有什么建议么?

4

2 回答 2

3

对于可复制性:

df1<-
tibble(
  A=c("a","b","c"),
  Ch=c("c1","xyz","c2"),
  val=paste0("x",1:3)
)

如果您尝试在所有列中执行此操作:

library(tidyverse)

df1%>%mutate_all(list(~ifelse(.=="c1"|.=="c2",.,"other")))

基础 R 解决方案:

data.frame(
sapply(
  df1,
  function(x)ifelse(x=="c1"|x=="c2",x,"other")
 )
)
于 2019-12-09T20:46:46.697 回答
0

如果您只想更改一列,这是另一种基本 R 解决方案

df1<-  data.frame(
A=c("a","b","c"),
Ch=c("c1","xyz","c2"),
val=paste0("x",1:3),  stringsAsFactors = FALSE)

df1$Ch[df1$Ch!="c1" & df1$Ch!="c2"] <- "other"

这将仅替换列 Ch

于 2019-12-09T21:08:22.127 回答