使用R中的条件替换列中的值

use*_*688 45 r conditional-statements dataframe

我有一个非常基本的R问题,但我很难找到正确的答案.我有一个如下所示的数据框:

 ind<-rep(1:4,each=24)
 hour<-rep(seq(0,23,by=1),4)
 depth<-runif(length(ind),1,50)

 df<-data.frame(cbind(species,ind,hour,depth))
 df$depth<-as.numeric(df$depth)
Run Code Online (Sandbox Code Playgroud)

我希望它选择并将深度<10(例如)的所有行替换为零,但我希望保留与这些行相关的所有信息以及数据框的原始尺寸.

我尝试了以下但这不起作用.

 ind<-rep(1:4,each=24)
 hour<-rep(seq(0,23,by=1),4)
 depth<-runif(length(ind),1,50)

 df<-data.frame(cbind(species,ind,hour,depth))
 df$depth<-as.numeric(df$depth)
Run Code Online (Sandbox Code Playgroud)

有什么建议?

Mat*_*agg 83

# reassign depth values under 10 to zero
df$depth[df$depth<10] <- 0
Run Code Online (Sandbox Code Playgroud)

(对于作为因子的列,您只能分配作为因子级别的值.如果要分配当前不是因子级别的值,则需要首先创建附加级别:

levels(df$species) <- c(levels(df$species), "unknown") 
df$species[df$depth<10]  <- "unknown" 
Run Code Online (Sandbox Code Playgroud)

  • 基于@42 解决方案和 [eth 帮助页面](https://stat.ethz.ch/R-manual/R-devel/library/base/html/Extract.data.frame.html) 尝试 `DF[ , c(39, 41:42)][DF[ ,c(39, 41:42)] &lt; 0] &lt;- 'NA' ` 将第 39、41 和 42 列中小于 0 的值替换为字符串 NA (3认同)

use*_*745 9

我是从谷歌搜索到这里的,因为我的其他代码是“整洁的”,所以将“整洁”的方式留给其他可能觉得有用的人

library(dplyr)
iris %>% 
  mutate(Species = ifelse(as.character(Species) == "virginica", "newValue", as.character(Species)))

Run Code Online (Sandbox Code Playgroud)