【问题标题】:Referencing different data frames(same size) for conditional change of resulting data frame引用不同的数据帧(相同大小)以有条件地更改结果数据帧
【发布时间】:2021-09-24 16:21:51
【问题描述】:

我想将存储在不同数据帧(相同大小)中的值包含到条件中,以便为结果数据帧生成值。 我的数据: int 包含针对许多人(按行)测量的不同特征(m2、m4、m1e3)的强度。

int<-data.frame(int_m2=c(33,32,35) ,int_m4=c(111,113,118), int_m1e3=c(104,99,110))
View(int)

针对每个特征(m2、m4、m1e3)进行 3 种不同的质量评估(s_、p_、i_)。

s_<-data.frame(s_m2=rep(8,3) ,s_m4=rep(100,3), s_m1e3=c("NA", 100, 100 ))    
p_<-data.frame(p_m2=rep(10,3), p_m4=rep(10,3), p_m1e3=c("NA", 10, 10 ))
i_<-data.frame(i_m2=rep(0.1,3), i_m4=rep(0.5,3), i_m1e3=c("NA", 0.1, 0.5 ))

如果质量评估条件为 TRUE,我需要粘贴 int 强度的结果。在 "NA" 或 FALSE 的情况下值应为 0。

质量评价条件: 如果条件(s_[i,j] >9 & p_[i,j] 0.2

预期结果:

res<-data.frame(m2=c(0,0,0),m4=c(111,113,118), m1e3=c(0, 0, 110 ))

精心咆哮: 我的目标是将其应用于大数据集并使用 foreachdopar 使其更快。 但是,在尝试了 mutate、ifelse、sappy 或老派 if/else 循环的组合之后,我总是陷入困境,如果应用于数据帧,如何使条件更改的输入。我在广泛的研究中发现的所有内容都是常数,作为应用于数据帧的条件。 所以我的每次尝试都是半成品代码,因此不是很有用的分享。 非常欢迎任何有关该主题的进一步阅读建议。

【问题讨论】:

    标签: r dataframe parallel.foreach multiple-conditions


    【解决方案1】:

    不要循环遍历ij,而是在整个数据集上创建多个逻辑表达式,然后与int 相乘。那些FALSE (-&gt; 0) 相乘返回 0 对应的 'int' 而TRUE (-&gt; 1) 将从 'int' 返回相同的值

    (s_ > 9 & p_ < 20 & i_ > 0.2) * int
    

    -输出

     int_m2 int_m4 int_m1e3
    1      0    111        0
    2      0    113        0
    3      0    118        0
    

    【讨论】:

    • 感谢您解决了这个问题以及许多未来的问题!使用如此简单而优雅的解决方案并没有让我想到!
    猜你喜欢
    • 2018-07-12
    • 2020-11-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-11-25
    • 1970-01-01
    • 2022-11-20
    • 1970-01-01
    相关资源
    最近更新 更多