R 如何按条件替换data.table中的元素(无循环)?
我有3个R 如何按条件替换data.table中的元素(无循环)?,r,data.table,R,Data.table,我有3个数据。表第一列为工作日,其余列为数字。 在第一个DT(DT1)中,它在每列上有7行和n列(n>2)。其余的DT(DT2,DT3)有7行2列和一个数字列 我想用相同的工作日替换DT3中小于或等于DT2中元素的每列元素(工作日列除外) x = c(8.38877450980392, 7.94021071115013, 7.95032679738562, 7.44576124567474, 8.83645276292335) y = c(83.8877450980392, 79.402107
数据。表第一列为工作日,其余列为数字。
在第一个DT(DT1)
中,它在每列上有7行和n
列(n>2
)。其余的DT(DT2,DT3)
有7行2列和一个数字列
我想用相同的工作日替换DT3
中小于或等于DT2
中元素的每列元素(工作日列除外)
x = c(8.38877450980392, 7.94021071115013, 7.95032679738562, 7.44576124567474,
8.83645276292335)
y = c(83.8877450980392, 79.4021071115013, 79.5032679738562, 74.4576124567474,
88.3645276292335)
DT1 = data.table(WeekDay = c("Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"), a = abs(rnorm(7)*100), b = abs(rnorm(7)*100), c = abs(rnorm(7)*100), d = abs(rnorm(7)*100))
DT2 = data.table(WeekDay = c("Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"), criteria = x)
DT3 = data.table(WeekDay = c("Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"), Replace_Value = y)
有没有一种没有循环的方法?
请只使用base R?
谢谢。这应该可以做到:
setkey(DT1, WeekDay)
setkey(DT2, WeekDay)
mx.data <- as.matrix(DT1[, letters[1:4], with=F])
(DT1[DT2][DT3][, letters[1:4]:=as.data.table(ifelse(mx.data < criteria, Replace_Value, mx.data))])
A.您的示例不可复制;x、 你有5个元素,你的一周有7个。为什么不合并数据呢?这是我可耻的错误。我打算用7个元素创建x,y。谢谢^^。哦!这对我来说是一项新技术。这工作做得很好。谢谢。@ USS330568,在回答你的问题的程度上,请考虑将它标记为回答。谢谢
x = c(8.38877450980392, 7.94021071115013, 7.95032679738562, 7.44576124567474,
8.83645276292335, 50, 25)
y = c(83.8877450980392, 79.4021071115013, 79.5032679738562, 74.4576124567474,
88.3645276292335, 50, 25)
set.seed(1)
DT1 = data.table(WeekDay = c("Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"), a = abs(rnorm(7)*100), b = abs(rnorm(7)*100), c = abs(rnorm(7)*100), d = abs(rnorm(7)*100))
DT2 = data.table(WeekDay = c("Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"), criteria = x * 7)
DT3 = data.table(WeekDay = c("Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"), Replace_Value = y)