python - 如何将这一行令人困惑的 Python 代码转换为 R

标签 python r pandas

我是 Python 的新手,我想知道下面这行代码在做什么以及如何用 R 编写它:

df['sticky'] = df[['humidity', 'workingday']].apply(lambda x: (0, 1)[x['workingday'] == 1 and x['humidity'] >= 60], axis = 1)

例如,lambda x: (0, 1) 是什么意思?

附言 df 是一个 pandas 数据框

最佳答案

让我们从 lambda 开始。完整的表达式是:

 lambda x: (0, 1)[x['workingday'] == 1 and x['humidity'] >= 60]

它是一个匿名函数,接受一个参数 x 并返回:

  • 1 如果 x['workingday'] == 1 且 x['humidity'] >= 60
  • 0否则

(0, 1)[...] 技巧用于返回 01 而不是 Python bool 值 。它利用了 FalseTrue 在代替 a 时将被强制转换为数字 01数值,例如作为数组(或元组)索引。例如,如果表达式的计算结果为 True,则访问元组的单元格 1,其中包含 1

此函数映射到(Pandas?)数据框的每一行(实际上,仅映射到过滤列 'humidity''workingday'),结果为存储在 'sticky' 列中。也就是说,您可以使用匿名 functionapply 在 R 中翻译相同的表达式。 :

df$sticky <- apply(df[, c("workingday", "humidity")], 1, function(x) {
    x["workingday"] == 1 & x["humidity"] >= 60;
});

(过滤可能不是必需的,但我的 R 技能很生疏)。

但是,正如 kdopen 所写:

df$sticky <- df$workingday == 1 & df$humidity >= 60

关于python - 如何将这一行令人困惑的 Python 代码转换为 R,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30597942/

相关文章:

python - 奇点行为 : shell vs exec

python - 如果存在差异,获取具有相同 id 的项目的最小最大值?

css - 删除shinydashboardPlus中的左侧边栏(仅保留右侧)

python - 如何在 python/pandas 中解压缩/解聚合分层数据?

python - Pandas:在一次操作中从单个系列创建两个列表

python - 将 Pandas 数据框列转换为数字的更好方法

python - 测试 python 中列表中的内容是否存在时遇到问题

Python vs Groovy vs Ruby? (基于相关标准)

r - R 中 'Everything that exists is an object' 的真正含义是什么?

r - 如何在 R 中并行化分组变异/总结