【问题标题】:sapply with function using multiple columns as input使用多列作为输入的函数
【发布时间】:2015-08-26 09:25:45
【问题描述】:

我有一个数据框,比如说 2 列和 4 行(它更大......我只是让它更简单),如下所示: 值:0.2、0.3、0.5、0.8 R: 1, 0, 1, 0

我正在尝试编写一个 sapply 行,当 R 为 0 时,给定 R 的值返回 Value,当 R 为 1 时返回 NA。 我会写这样的东西:

sapply(dataframe[[R]], function(x) ifelse(x==1,NA,dataframe[[Value]][[indexOf(x)]]))

有没有我可以使用的类似于我的“indexOf”(虚函数)函数的东西?

使用 for 循环很容易完成这项任务,但我想用 sapply 高效地完成它。

【问题讨论】:

    标签: r missing-data


    【解决方案1】:

    ifelse 是你要找的。​​p>

    > df = data.frame(Value=c(0.2, 0.3, 0.5, 0.8),
                      R=c(1, 0, 1, 0))
    
    > df$New = ifelse(df$R==1, df$Value, NA)
    
    > df
      Value R New
    1   0.2 1 0.2
    2   0.3 0  NA
    3   0.5 1 0.5
    4   0.8 0 NA 
    

    【讨论】:

    • 事实上,如果你想在 R 插入 R 插入 ==1 的地方插入 NA,我的做法与你的要求相反,但你明白了。
    【解决方案2】:

    此任务不需要 sapplyifelse。您可以使用数学运算符。

    dat <- data.frame(Value = c(0.2, 0.3, 0.5, 0.8),
                      R = c(1, 0, 1, 0))
    
    transform(dat, NewCol = Value * NA ^ R)
    #   Value R NewCol
    # 1   0.2 1     NA
    # 2   0.3 0    0.3
    # 3   0.5 1     NA
    # 4   0.8 0    0.8
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-11-15
      • 2021-09-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-03-13
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多