我正在编写一个由ifelse语句组成的函数,这些语句依赖于函数输入的不同列中的值:
counter=function(df){
df$total2=ifelse(df$x>=100,df$total+10,df$total)
df$total3=ifelse(df$y>=200,df$total2+10,df$total2)
}
看起来我这样做的方式效率很低,但我还没有想过要避免覆盖计算的方法。
但更紧迫的是,我想要使用此功能的一些dfs没有列x和列y。当我在这些上运行它时,会出现以下错误;
$<-.data.frame
(*tmp*
,&#34; total3&#34;,value = logical(0))出错:
替换有0行,数据有74个
有没有办法重写这个以允许没有所有列的数据帧?
谢谢。
答案 0 :(得分:3)
您可以使用标准if
查看列是否存在
counter <- function(df) {
if ("x" %in% names(df) ) {
df<- transform(df, total2=ifelse(x>=100,total+10,total)
}
if("y" %in% names(df) ) {
df <- transform(df, total3=ifelse(y>=200,total2+10,total2)
}
}
虽然您的数据似乎可能在广泛的范围内。格式化时可能更容易在a&#34; tall&#34;格式。您可能希望研究重塑数据。