我是 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)[...]
技巧用于返回 0
或 1
而不是 Python bool 值 假
和真
。它利用了 False
和 True
在代替 a 时将被强制转换为数字 0
和 1
数值,例如作为数组(或元组)索引。例如,如果表达式的计算结果为 True
,则访问元组的单元格 1
,其中包含 1
。
此函数映射到(Pandas?)数据框的每一行(实际上,仅映射到过滤列 'humidity'
和 'workingday'
),结果为存储在 'sticky'
列中。也就是说,您可以使用匿名 function
和 apply
在 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/