【问题标题】:Subsetting with $ when column may not exist当列可能不存在时使用 $ 子集
【发布时间】:2014-11-26 07:47:22
【问题描述】:

我正在编写一个由 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*, "total3", value = logical(0)) 中的错误: 替换有 0 行,数据有 74

有没有办法重写它以允许没有所有列的数据框?

谢谢。

【问题讨论】:

  • 当列丢失时您希望的行为是什么?请提供reproducible example 示例输入和所需输出。
  • 旁注:看起来你可以从使用with中受益
  • 我希望它什么都不做 - 所以如果该列不存在,该函数基本上会忽略该命令。

标签: r dataframe subset


【解决方案1】:

您可以只使用标准的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)
    }
}

虽然您的数据看起来可能是“宽”格式,但使用“高”格式可能更容易。您可能想研究重塑数据。

【讨论】:

    猜你喜欢
    • 2020-11-10
    • 2020-12-25
    • 1970-01-01
    • 2021-08-28
    • 2021-03-08
    • 1970-01-01
    • 2015-07-29
    • 1970-01-01
    相关资源
    最近更新 更多