所以我有一个我想实现的循环,如果值(在a行和col b行)等于某个数字,则分配原始值(在a行和col b行)+1;但是,当我尝试分配使用的数字with = FALSE
,我无法这样做,将其删除会产生一个输出,其中整个col为=
原始值(在a行和col b行)+1。
测试用例:
a <- rep(0,6)
b <- 1:6
c <- -3:2
d <- runif(6)
e <-runif(6)
dt1 <- data.table("ID" = b,"code_a" = a,"code_c" = c, "code_d" = d, "code_e" = e)
dt1
ID code_a code_c code_d code_e
1: 1 0 -3 0.5369538 0.269854945
2: 2 0 -2 0.7186787 0.009384648
3: 3 0 -1 0.8053726 0.831286263
4: 4 0 0 0.2084106 0.171294349
5: 5 0 1 0.0130021 0.730679582
6: 6 0 2 0.2902858 0.062175009
因此,在下文中,我分配ctr <- 1
并测试了要替换的方案,col_2
并row_1
用数字1进行了替换,但是不幸的是,这两种方案都不是我想要的输出。
我的尝试次数1:
dt1[,eval(ctr+1), with = FALSE][ctr] <- 1
Error in `[<-.data.table`(`*tmp*`, , eval(ctr + 1), with = FALSE, value = list( :
unused argument (with = FALSE)
我的尝试2:
dt1[,eval(ctr+1)][ctr] <- 1
> dt1
ID code_a code_c code_d code_e
1: 1 1 -3 0.5369538 0.269854945
2: 2 1 -2 0.7186787 0.009384648
3: 3 1 -1 0.8053726 0.831286263
4: 4 1 0 0.2084106 0.171294349
5: 5 1 1 0.0130021 0.730679582
6: 6 1 2 0.2902858 0.062175009
所需输出:
ID code_a code_c code_d code_e
1: 1 1 -3 0.5369538 0.269854945
2: 2 0 -2 0.7186787 0.009384648
3: 3 0 -1 0.8053726 0.831286263
4: 4 0 0 0.2084106 0.171294349
5: 5 0 1 0.0130021 0.730679582
6: 6 0 2 0.2902858 0.062175009
这可能是以前问过的,但是我找不到正确的方法来找到询问此问题的线程。我也尝试使用..ctr
但没有成功。如果有人可以帮助我了解最新情况,将不胜感激。
我们可以使用set
与i
和j
指数
set(dt1, i = as.integer(ctr), j = 2L, value = 1)
dt1
# ID code_a code_c code_d code_e
#1: 1 1 -3 0.37168485 0.89323758
#2: 2 0 -2 0.44402352 0.70270947
#3: 3 0 -1 0.50800021 0.82133031
#4: 4 0 0 0.14904232 0.33997461
#5: 5 0 1 0.03376199 0.22633368
#6: 6 0 2 0.42361025 0.02377616
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句