矢量化:根据条件更改多列的值

News_is_Selection_Bias

我想以矢量化方式更改多列值基本单元格条件。我知道如何一列一列地更改值,但如何同时更改两列以上的值。例如,如果 col1 或 col2 <3,我们希望将这些单元格设置为 99。

     col1<-seq(1,5)
     col2<-(1:5)
     col3<-10:14
     df<-data.frame(col1,col2,col3)

     df[df[,1:2]<5]<-99 ##wrong, but it works for a single column

     ifelse(df[,1:2]<5,99,??) # i dont know how to set the value to the original values here

# works for single column
df[df$col1<5,1]<-99
df[df$col2<5,2]<-99

> df
  col1 col2 col3
1   99   99   10
2   99   99   11
3   99   99   12
4   99   99   13
5    5    5   14
阿克伦

我们得到了一个基于两列matrix的逻辑元素TRUE/FALSE因此,如果我们需要对两列的元素进行子集化,则只选择那些列来对元素进行子集化并将其分配给 999

df[1:2][df[1:2] < 5] <- 999

如果我们拆分代码并检查各个组件即

1) 逻辑元素矩阵

 df[1:2] < 5
 #      col1  col2
 #[1,]  TRUE  TRUE
 #[2,]  TRUE  TRUE
 #[3,]  TRUE  TRUE
 #[4,]  TRUE  TRUE
 #[5,] FALSE FALSE

2) 选择感兴趣的列对满足逻辑矩阵中条件的列进行子集

 df[1:2][df[1:2] < 5]
 #[1] 1 2 3 4 1 2 3 4

想象一下,如果我们在整个数据集上应用它。然后,尺寸/长度不相同。在某些情况下,如果原始数据集中的列数是逻辑矩阵列的倍数,它甚至可以通过回收来解决(因此请注意这种可能性)

3) 将值分配给 999


使用ifelse可以做到vector秒。所以循环遍历列然后进行分配

df[1:2] <- lapply(df[1:2], function(x) ifelse(x < 5, 999, x))

或与 replace

df[1:2] <- lapply(df[1:2], function(x) replace(x, x < 5, 999))

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

根据同一列的先前值对列值进行矢量化计算?

来自分类Dev

当直接使用loc根据条件分配值时,矢量化实现会引发KeyError

来自分类Dev

使用R中的矢量化代码在多列之间比较和替换值

来自分类Dev

多列熊猫矢量化字符串函数?

来自分类Dev

根据R?中的一组观测值创建频率矢量的矢量化方法

来自分类Dev

熊猫列的矢量化“和”

来自分类Dev

使用`dplyr`生成多列变量,并以矢量化方式运行

来自分类Dev

带条件的每行唯一值的2D矢量化

来自分类Dev

如何在Eigen / C ++中进行矢量化:在条件下设置列

来自分类Dev

矢量化熊猫-使用另一列将列分配给数组值

来自分类Dev

numpy矢量化

来自分类Dev

熊猫矢量化

来自分类Dev

矢量化算法

来自分类Dev

矢量化列表

来自分类Dev

Python:沿轴的矢量化条件和

来自分类Dev

使用矢量化减少for循环,如何使用条件if?

来自分类Dev

熊猫:每行最大值的矢量化运算

来自分类Dev

在熊猫中按列内容标记日期(矢量化)

来自分类Dev

在熊猫中按列内容标记日期(矢量化)

来自分类Dev

以矢量化方式更新 oracle 中的列

来自分类Dev

Julia:矢量化与反矢量化代码

来自分类Dev

在矢量化函数中调用矢量化函数

来自分类Dev

Matlab效率-矢量化

来自分类Dev

numpy矢量化错误

来自分类Dev

矢量化Elseif循环

来自分类Dev

MATLAB bsxfun或矢量化

来自分类Dev

简单的Numpy矢量化

来自分类Dev

Mat的for循环矢量化

来自分类Dev

阵列产品的矢量化