【问题标题】:Create vector selecting values from two different vectors从两个不同的向量中创建向量选择值
【发布时间】:2016-10-18 15:20:38
【问题描述】:

目前,这段代码可以做我想做的事情,其中​​ dx$res 是一个向量,根据 dx$x0 的值从 dx$val1 或 dx$val2 中选择值。

x0<-c(1,2,1,2,2,1)
val1<-c(8,6,4,5,3,2)
val2<-c(4,8,6,7,9,5)
dx<-data.frame(x0,val1,val2)
dx$res<-(dx$x0==1)*dx$val1+(dx$x0==2)*dx$val2

我想知道是否有更优雅的方法可以做到这一点,比如使用 apply 函数。

【问题讨论】:

  • 我很想使用with:dx$res &lt;- with(dx, (x0 == 1) * val1 + (x0 == 2) * val2)。它可能更容易阅读。还有一个ifelse 解决方案,但我更喜欢你使用的方法。
  • 感谢您的提议。

标签: r


【解决方案1】:

一个选项是model.matrixrowSums。对于“x0”列中的“n”个不同元素也更通用。

dx$res <- rowSums(dx[-1]*model.matrix(~ factor(x0) - 1 , dx))
dx$res
#[1] 8 8 4 7 9 2

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-24
    • 2019-11-20
    • 1970-01-01
    相关资源
    最近更新 更多