Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/ms-access/4.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 将ifelse与基于向量索引的条件语句一起使用以循环行_R - Fatal编程技术网

R 将ifelse与基于向量索引的条件语句一起使用以循环行

R 将ifelse与基于向量索引的条件语句一起使用以循环行,r,R,基本上我有一个数据帧。在此基础上,我采用了两个新的索引,以向我指示将用于更改此数据集的每一行的值。我还有一个代码来替换我希望替换的值(基本上直到新索引所指示的列被更改为0)。我只是不知道怎么把这些放在一起 这是我最初使用的数据帧,ind1和ind2用于创建一个新的索引,我将其作为单独的向量 COL1 <- c(1,1,1,NA,1,1) COL2 <- c(1,NA,NA,1,1,1) COL3 <- c(1,1,1,1,1,1) ind1 <- c(1,2,1,2,1,

基本上我有一个数据帧。在此基础上,我采用了两个新的索引,以向我指示将用于更改此数据集的每一行的值。我还有一个代码来替换我希望替换的值(基本上直到新索引所指示的列被更改为0)。我只是不知道怎么把这些放在一起

这是我最初使用的数据帧,ind1和ind2用于创建一个新的索引,我将其作为单独的向量

COL1 <- c(1,1,1,NA,1,1)
COL2 <- c(1,NA,NA,1,1,1)
COL3 <- c(1,1,1,1,1,1)
ind1 <- c(1,2,1,2,1,2)
ind2 <- c(3,3,2,3,3,3)
Data <- data.frame (COL1, COL2, COL3, ind1, ind2)
Data
COL1 COL2 COL3 ind1 ind2
1    1    1    1    3    
1    NA   1    2    3
1    NA   1    1    2   
NA   1    1    2    3
1    1    1    1    3
1    1    1    2    3
如果实际>预测为false,则在该行上运行下面的函数

replace(Data, cbind(rep(1:NROW(Data), Data$ind1), sequence(Data$ind1)), 0)
replace(Data, cbind(rep(1:NROW(Data), Data$ind2), sequence(Data$ind2)), 0)
对于这个数据帧示例,我希望输出是一个新的数据帧,其中

Data2
COL1 COL2 COl3 ind1 ind2
1    1    1    1    3
1    1    1    2    3
1    1    1    1    2
0    0    0    2    3
0    0    0    1    3
0    0    1    2    3
到目前为止我试过的是

Data2<- c()
for (i in 1:NROW (Data)) {if (actual < prediction) {
  Data2[i]<- replace(Data, cbind(rep(1:NROW(Data), Data$ind1), sequence(Data$ind1)), 0)
 } else {
  Data2[i]<- replace(Data, cbind(rep(1:NROW(Data), Data$ind2), sequence(Data$ind2)), 0)
 }  
}

Data2经过我们的多次反复,我相信这是为您提供所需输出的答案

COL1 <- c(1,1,1,NA,1,1)
COL2 <- c(1,NA,NA,1,1,1)
COL3 <- c(1,1,1,1,1,1)
ind1 <- c(1,2,1,2,1,2)
ind2 <- c(3,3,2,3,3,3)
Data <- data.frame (COL1, COL2, COL3, ind1, ind2)
actual <- c(5,3,4,1,1,2)
prediction <- c(1,1,2,5,5,1)

logic <- ifelse(actual > prediction, TRUE, FALSE)
它与您的输出不同,因为逻辑输出在第六个位置为true


我希望这有帮助

经过我们的多次往返,我相信这是为您提供所需输出的答案

COL1 <- c(1,1,1,NA,1,1)
COL2 <- c(1,NA,NA,1,1,1)
COL3 <- c(1,1,1,1,1,1)
ind1 <- c(1,2,1,2,1,2)
ind2 <- c(3,3,2,3,3,3)
Data <- data.frame (COL1, COL2, COL3, ind1, ind2)
actual <- c(5,3,4,1,1,2)
prediction <- c(1,1,2,5,5,1)

logic <- ifelse(actual > prediction, TRUE, FALSE)
它与您的输出不同,因为逻辑输出在第六个位置为true


我希望这有帮助

我会用下面的方法解决这个问题。然而,我并不完全理解你的替换逻辑。因为这个原因我把它漏掉了

以下内容将条件和替换逻辑分离为一个函数。因此,只需使用
apply
再次调用它,就可以轻松地将其用于其他数据帧

COL1 <- c(1,1,1,NA,1,1)
COL2 <- c(1,NA,NA,1,1,1)
COL3 <- c(1,1,1,1,1,1)
ind1 <- c(1,2,1,2,1,2)
ind2 <- c(3,3,2,3,3,3)

actual <- c(5,3,4,1,1,2)
prediction <- c(1,1,2,5,5,1)

Data <- data.frame (
  col1 = COL1, col2 = COL2, col3 = COL3, ind1 = ind1, ind2 = ind2,
  actual = actual, prediction = prediction)

custom.replace <- function(row) {
  # watch out! row is an atomic vector.
  if (row["actual"] > row["prediction"]) {
    # one of your replacement logic goes here.
  } else {
    # the other goes here.
  }
}

row.axis <- 1
apply(Data, row.axis, custom.replace)

COL1我会用下面的方法解决这个问题。然而,我并不完全理解你的替换逻辑。因为这个原因我把它漏掉了

以下内容将条件和替换逻辑分离为一个函数。因此,只需使用
apply
再次调用它,就可以轻松地将其用于其他数据帧

COL1 <- c(1,1,1,NA,1,1)
COL2 <- c(1,NA,NA,1,1,1)
COL3 <- c(1,1,1,1,1,1)
ind1 <- c(1,2,1,2,1,2)
ind2 <- c(3,3,2,3,3,3)

actual <- c(5,3,4,1,1,2)
prediction <- c(1,1,2,5,5,1)

Data <- data.frame (
  col1 = COL1, col2 = COL2, col3 = COL3, ind1 = ind1, ind2 = ind2,
  actual = actual, prediction = prediction)

custom.replace <- function(row) {
  # watch out! row is an atomic vector.
  if (row["actual"] > row["prediction"]) {
    # one of your replacement logic goes here.
  } else {
    # the other goes here.
  }
}

row.axis <- 1
apply(Data, row.axis, custom.replace)

COL1@thelatemail fixed,很抱歉我写得很匆忙,但实际向量是我在这个数据帧上使用apply函数得到的向量,对于这个例子,我只是通过一些随机向量,我仍然没有真正理解。对于实际>预测的每一行,您更改整个数据集中的数据?对于实际>预测的每一行,则对该行执行第一个函数。当评估不是实际>预测时,则在该行上执行第二个函数。我想让这个过程遍历所有行。你能提供一个你尝试过的代码示例吗?@JamieVarney-但对我来说,在一行上运行这个函数没有意义。您正在为一行中的多个行和列编制索引,这是
replace
ment的一部分。@LateMail已修复,很抱歉我匆忙编写了此内容,但实际向量是我在此数据帧上使用应用函数得到的向量,在本例中,我只是通过一些随机向量,我仍然没有真正了解这一点。对于实际>预测的每一行,您更改整个数据集中的数据?对于实际>预测的每一行,则对该行执行第一个函数。当评估不是实际>预测时,则在该行上执行第二个函数。我想让这个过程遍历所有行。你能提供一个你尝试过的代码示例吗?@JamieVarney-但对我来说,在一行上运行这个函数没有意义。作为
replace
replace的一部分,您正在为单行中的多个行和列编制索引。
COL1 <- c(1,1,1,NA,1,1)
COL2 <- c(1,NA,NA,1,1,1)
COL3 <- c(1,1,1,1,1,1)
ind1 <- c(1,2,1,2,1,2)
ind2 <- c(3,3,2,3,3,3)

actual <- c(5,3,4,1,1,2)
prediction <- c(1,1,2,5,5,1)

Data <- data.frame (
  col1 = COL1, col2 = COL2, col3 = COL3, ind1 = ind1, ind2 = ind2,
  actual = actual, prediction = prediction)

custom.replace <- function(row) {
  # watch out! row is an atomic vector.
  if (row["actual"] > row["prediction"]) {
    # one of your replacement logic goes here.
  } else {
    # the other goes here.
  }
}

row.axis <- 1
apply(Data, row.axis, custom.replace)