Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typescript/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/jpa/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 如何按条件替换data.table中的元素(无循环)?_R_Data.table - Fatal编程技术网

R 如何按条件替换data.table中的元素(无循环)?

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

我有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.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)