【问题标题】:if else statement in data.table packagedata.table 包中的 if else 语句
【发布时间】:2016-03-12 04:19:10
【问题描述】:

我有一个 6 列和 450 万行的数据集。我想写一个逻辑检查是否在第五列中有零值,将 1 放在第六列。你能解释一下如何构造一个算法来做到这一点吗?在第五列中,我发现我的单元格的值为零。我想执行如果在第五列中我有零值将 1 放入第六列,如果没有则放入 0?我必须使用 data.table 包。我试试这个 数据名称[,6] = ifelse(数据名称[,5] == 0, 1, 数据名称[,6])。

【问题讨论】:

  • 请展示一个可重现的小例子以及基于此的预期结果。有关指南,请查看here
  • 当我使用 read.csv 时我没有问题。由于我使用 data.table 我无法使用此命令 df[,6] = ifelse(df[,5] == 0, 1, df[,6])

标签: r data.table


【解决方案1】:

使用data.table,我们可以使用:=,这样会更高效(示例数据来自@plafort 的帖子)

library(data.table)#v1.9.4+
setDT(df)[X5==0, X6:=1] 

【讨论】:

  • 它对我有用。看起来语法是setDT(df)[<when this is true>, <do this>]。通过扩展,[<when this>, <do this>, <by this factor>]
  • 大家好,它有效。再次感谢您的支持,我非常感谢您的帮助。我要感谢 Akrun 的帮助。
  • @plafort,这是一种很好的方式来解释背后的总体思路!
【解决方案2】:

这是一个基本的 R 方式:

df[,6][df[,5] == 0] <- 1

在许多情况下,您可以避免编写显式的if 语句。条件隐含在子集中。读出来会说:“在数据框的第六列,将值 1 分配给与第五列相邻的所有值。”更熟悉在 data.table 中分配列值的人可以轻松地将其应用于您的案例。

数据

set.seed(5)
df <- data.frame(replicate(6, sample(0:5, 3)))
df[2,5] <- 0
df
  X1 X2 X3 X4 X5 X6
1  1  1  3  0  1  1
2  3  0  4  1  0  5
3  4  2  5  4  5  3

df[,6][df[,5] == 0] <- 1

df
  X1 X2 X3 X4 X5 X6
1  1  1  3  0  1  1
2  3  0  4  1  0  1
3  4  2  5  4  5  3

【讨论】:

  • 使用data.table时无法应用。
  • 使用 akrun 的建议。 @akrun 如果您愿意,请添加答案。
猜你喜欢
  • 1970-01-01
  • 2019-04-09
  • 2015-10-28
  • 2017-02-05
  • 2013-03-09
  • 1970-01-01
  • 2015-07-06
  • 2012-08-05
相关资源
最近更新 更多