【问题标题】:Vectorize for-loop向量化 for 循环
【发布时间】:2019-05-17 04:36:57
【问题描述】:

我有以下数据:

Letters <- c("A","B","C")
Numbers <- c(1,0,1)
Numbers <- as.integer(Numbers)

Data.Frame <- data.frame(Letters,Numbers)

我想为字母创建一个虚拟变量并编写了以下 for 循环:

for(level in unique(Data.Frame$Letters)){Data.Frame[paste("", level, sep = "")]
<- ifelse(Data.Frame$Letters == level, 1, 0)}

有没有办法向量化这个 for 循环? dcast 的以下使用是否已经矢量化?

dt <- data.table(Letters,Numbers)
dcast.data.table(dt, Letters+Numbers~Letters,fun.aggregate=length)

【问题讨论】:

    标签: r for-loop vectorization


    【解决方案1】:

    你可以使用outer

    cbind(Data.Frame, +outer(Letters, setNames(nm=Letters), "=="))
    #   Letters Numbers A B C
    # 1       A       1 1 0 0
    # 2       B       0 0 1 0
    # 3       C       1 0 0 1
    

    【讨论】:

    • 非常感谢。这是向量化的,因为外部函数将“==”应用于两个向量 Letters 和 setNames(nm=Letters)?
    • outer 是矢量化函数,是的。 (即没有内部循环)
    猜你喜欢
    • 1970-01-01
    • 2021-06-27
    • 2013-07-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-03-15
    相关资源
    最近更新 更多