【发布时间】:2018-08-10 18:24:18
【问题描述】:
我正在尝试向我的 df 添加一个新列,这只是我的函数 hardfunct 应用于行为“硬度”的“值”。然后,我希望该值填充该列中匹配的“站点”和“日期”的所有行。如何填充其余的行?我尝试过使用 summarise、rowwise 和 mutate。示例数据如下。
site=c(rep("River A",4),rep("River B",4))
dates=as.Date(c("01/01/2001","01/01/2001","01/01/2001","01/01/2001","05/08/2001","05/08/2001","05/08/2001","05/08/2001"), format = "%m/%d/%Y")
param=c("lead","hardness","mercury","cadmium","lead","hardness","mercury","cadmium")
value=c("0.2","45","0.9","1.2","0.5","1800","0.6","0.8")
df=data.frame(site,param,dates,value)
hardfunct=function(x){
if (x>=400) {
print(400)
} else if (x<=25) {
print(25)
} else {
return(x)}
}
#######Trying to use group_by and mutate
df %>% group_by(site,dates) %>%
mutate(New_Hardness=sapply(df[df$param=="hardness","value"],hardfunct))
这是包含新列的数据框的样子
site param dates value New_Hardness
River A lead 1/1/2001 0.2 45
River A hardness 1/1/2001 45 45
River A mercury 1/1/2001 0.9 45
River A cadmium 1/1/2001 1.2 45
River B lead 5/8/2001 0.5 400
River B hardness 5/8/2001 1800 400
River B mercury 5/8/2001 0.6 400
River B cadmium 5/8/2001 0.8 400
【问题讨论】:
-
在更正变量格式
df$value <- as.numeric(as.character(value))之后with(df, pmax(25, pmin(400, value)))应该可以工作...?哦,没关系,没有注意到“为匹配的“站点”和“日期”填充该列中的所有行。