我想将data.table中的列的值更新为同一个表中的另外两列。
此代码在某种程度上有效,但我想更新DT中的值而不是返回DT列表。
library(data.table)
library(gtools)
# Create Data Table
DT <- as.data.table(combinations(3,2,1:3,repeats=TRUE))
DT[, V3 := 9999 ]
DT
> V1 V2 V3
>1: 1 1 9999
>2: 1 2 9999
>3: 1 3 9999
>4: 2 2 9999
>5: 2 3 9999
>6: 3 3 9999
# create function
stationary <- function(i) {DT[i, V3 := if (V1==V2) 0 else V1+V2 ]}
i <- 1:nrow(DT)
DT <- lapply(i, stationary) # This returns a list of identical data tables
DT
> V1 V2 V3
>1: 1 1 0
>2: 1 2 3
>3: 1 3 4
>4: 2 2 0
>5: 2 3 5
>6: 3 3 0
答案 0 :(得分:5)
我会这样做:
DT[, V3 := (V1 + V2) * (V1 != V2)]
# V1 V2 V3
#1: 1 1 0
#2: 1 2 3
#3: 1 3 4
#4: 2 2 0
#5: 2 3 5
#6: 3 3 0
快速而简单。
答案 1 :(得分:2)
您可以使用链接:
var _l2approvaluserid = this.travelContext.EmployeeReportingLevels.Where(e => e.userId == personalother.FirstOrDefault(x => x.gpersonal.id == personalother.Key).gpersonal.createdBy).FirstOrDefault().level2;
personalviewdetail = new PersonalRequestDisplayModel
{
....
l2approvaluserid = _l2approvaluserid;
....
l2Name = this.travelContext.Employees.Where(emp => emp.userId == _l2approvaluserid).FirstOrDefault().firstName,
}
如果您坚持使用整数,则可以避免library(data.table)
library(gtools) # combinations()
DT <- as.data.table(combinations(3,2,1:3,repeats=TRUE))
DT[, V3 := 9999 ]
DT[V1==V2, V3 := 0
][V1!=V2, V3 := as.numeric(V1+V2)
][]
# V1 V2 V3
# 1: 1 1 0
# 2: 1 2 3
# 3: 1 3 4
# 4: 2 2 0
# 5: 2 3 5
# 6: 3 3 0
来电,因此as.numeric
和V3 := 9999L
。