60

我有一个非常基本的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)

我希望它选择并depth < 10用零替换所有行(例如),但我想保留与这些行相关联的所有信息以及数据框的原始维度。

我尝试了以下方法,但这不起作用。

df[df$depth<10]<-0

有什么建议么?

4

2 回答 2

111
# reassign depth values under 10 to zero
df$depth[df$depth<10] <- 0

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

levels(df$species) <- c(levels(df$species), "unknown") 
df$species[df$depth<10]  <- "unknown" 
于 2012-12-14T02:08:00.210 回答
13

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

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

于 2020-03-15T03:02:32.507 回答