【问题标题】:Within an R data.table can you add multiple columns using conditional statements?在 R data.table 中,您可以使用条件语句添加多个列吗?
【发布时间】:2015-05-20 01:20:02
【问题描述】:

我想根据其他列中的值在一个函数中向 data.table 添加多个列,例如

d.f <- data.frame(a=c(1,2,3),b=c(4,5,1))
d.t <- data.table (d.f)

g <- function(x,y){
  if (y>x)
     return (list(1,2))
   else 
return (list(2,1))
}
 d.t[,c('x','y'):=g(a,b)]

但是这个错误出来了,使用 ifelse 似乎也不起作用。

【问题讨论】:

  • 或许d.t[, c('x', 'y') := g(a,b), by=1:nrow(d.t)][]
  • 看看你的函数g(d.t$a, d.t$b)的输出
  • akrun,这行得通,如果你把它作为评论添加,我会标记它是正确的
  • eddi,它会发出警告,但如果我使用 ifelse,它会默默地给出错误的结果

标签: r data.table


【解决方案1】:

您应该使用ifelse 而不是if (...) else。此外,return 语句应该是一个长度为 2 的列表,每个列表元素的长度与 xy 相同。

g <- function(x,y){
  list(ifelse(y>x, 1, 2), 
       ifelse(y>x, 2, 1))
}

【讨论】:

  • 这行得通,但不幸的是不能解决问题,因为它需要复制 ifelse(这比实际示例和嵌套更复杂),这是我试图避免的。
猜你喜欢
  • 2014-10-23
  • 2021-09-02
  • 1970-01-01
  • 2012-02-05
  • 1970-01-01
  • 2020-07-27
相关资源
最近更新 更多