gpt4 book ai didi

r - 使用所选列中所有值的最大值有条件地更新某些列(data.table,r)

转载 作者:行者123 更新时间:2023-12-04 11:50:23 29 4
gpt4 key购买 nike

我有一个 900,000 x 500 类型的数据集,但下面显示了一个适合该问题的玩具数据集。

library(data.table)
df1 <- data.table(x = c(1,2,4,0), y = c(0,0,10,15), z = c(1,1,1,0))

我想做以下事情:

  1. 对于列 y 和 z
  2. 选择值 = 0 的行
  3. 将这些替换为 max+1,其中 max 是在整个列上计算的

我对 data.table 很陌生。在stackoverflow上查看问题示例,我找不到类似的问题,除了这个: How to replace NA values in a table *for selected columns*? data.frame, data.table

我自己的尝试如下,但这不起作用:

for (col in c("x", "y")) df1[(get(col)) == 0, (col) := max(col) + 1)

显然,我还没有习惯data.table,所以我现在正在用头撞墙......

如果有人能提供 data.table 之外的 dplyr 解决方案,我将不胜感激。

最佳答案

我们可以使用 set 并将值为 0 的行分配为该列的 max +1。

 for(j in c("y", "z")){
set(df1, i= which(!df1[[j]]), j=j, value= max(df1[[j]])+1)
}

df1
# x y z
#1: 1 16 1
#2: 2 16 1
#3: 4 10 1
#4: 0 15 2

注意:set 方法将非常有效,因为避免了 [.data.table 的开销


或者效率较低的方法是在 .SDcols 中指定感兴趣的列,循环遍历列 (lapply(..),replace 基于逻辑索引的值,并将 (:=) 输出分配回列。

df1[, c('y', 'z') := lapply(.SD, function(x) 
replace(x, !x, max(x)+1)), .SDcols= y:z]

关于r - 使用所选列中所有值的最大值有条件地更新某些列(data.table,r),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34791124/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com