【发布时间】:2019-10-22 21:55:24
【问题描述】:
基本上我有一个数据框。从此,我采用了 2 个新索引来向我指示将用于更改此数据集的每一行的值。我还有一个代码来替换我想要替换的值(基本上直到新索引指示的列更改为 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
新的向量索引看起来像这样,目前不在数据框中
actual <- c(5,3,4,1,1,2)
prediction <- c(1,1,2,5,5,1)
基本上我希望该函数评估每一行的实际 > 预测,如果这是 true,那么它会在 该行上运行下面的函数
replace(Data, cbind(rep(1:NROW(Data), Data$ind1), sequence(Data$ind1)), 0)
如果实际 > 预测为 false,那么它会在 该行上运行下面的函数
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 的列表输出列表。但我正在寻找的是一个新的数据框。
【问题讨论】:
-
@thelatemail 已修复,对不起,我写的很匆忙,但实际的向量是我在这个数据帧上使用应用函数得到的,对于这个例子,我只是通过一些随机的在那里
-
我仍然没有真正遵循这一点。对于实际 > 预测的每一行,您会更改整个数据集中的数据吗?
-
对于实际 > 预测的每一行,然后在该行上执行第一个函数。当评估不是实际的 > 预测时,第二个函数在该行上执行。我希望这个过程遍历所有行。
-
您能提供一个您尝试过的代码示例吗?
-
@JamieVarney - 对我来说,该函数在单行上运行没有意义。作为
replacement 的一部分,您正在为单行中的多行和多列编制索引。
标签: r