gpt4 book ai didi

r - 带双循环的条件和行列

转载 作者:行者123 更新时间:2023-12-01 10:28:51 33 4
gpt4 key购买 nike

我遇到了关于“下标越界”的问题,我想要的是获得每个观察值的第一个和最后一个月,其中我有三个连续的“1”或“True”。我想创建 2 个新列“开始”和“结束”,分别是第一个月和最后一个月。在我的第一个观察示例中:开始等于 avril,结束等于 juin在第 5 个观察中:开始等于 fevrier,结束等于 avril在第 9 个观察中:开始等于 janvier,结束等于 mars...

我试着这样做:

nom <- letters[1:5]
pseudo <- paste(name, 21:25, sep = "")
janvier <- c(0, 1, 1, 1, 0)
fevrier <- c(1, 1, 1, 1, 1)
mars <- c(0, 0, 0, 1, 1)
avril <- c(1, 1, 1, 0, 1)
mai <- c(1, 0, 1, 1, 1)
juin <- c(1, 1, 0, 1, 0)

df <- data.frame(nom =nom, pseudo = pseudo, janvier = janvier,
fevrier = fevrier, mars = mars, avril = avril,
mai = mai, juin = juin)

dfm <- as.matrix(df[, -c(1, 2)])

my_matrix <- matrix(nrow = 10, ncol = 6)


for(i in 1:dim(dfm)[1]){
for(j in 1:dim(dfm)[2]){
if(dfm[i, j] + dfm[i, j+1] + dfm[i, j+2] == 3){
my_matrix[i, j] <- "periode_ok"
my_matrix[i, j+1] <- "periode_ok"
my_matrix[i, j+2] <- "periode_ok"
}
}
}

输出应该是这样的:

begin <- c("avril", "no  info", "no info",
"janvier", "fevrier", "avril", "no info",
"no info", "janvier", "fevrier")
end <- c("juin", "no info", "no info", "mars",
"avril", "juin", "no info", "no info",
"mars", "avril")

output <- data.frame(nom =nom, pseudo = pseudo, janvier = janvier,
fevrier = fevrier, mars = mars, avril = avril,
mai = mai, juin = juin, begin = begin,end = end)

我们将不胜感激

最佳答案

首先,像 1:dim(dfm)[1] 这样的结构是危险的,因为如果 dim(dfm)[1] 为零,你将得到完美的有效向量 1:0 并且循环将尝试寻址向量的元素零,在本例中为矩阵。这是非法的,会引发错误。推荐的解决方案是使用 seq_len(...)。其次,我使用了 nrowncol 而不是 dim(dfm)[.]。现在你得到的错误。您正在尝试处理 j + 1j + 2 列,因此当 j 达到 ncol(dfm)你的债券用完了。下面的代码删除了循环限制的最后两个元素。

n <- ncol(dfm)
for(i in seq_len(nrow(dfm))){
for(j in seq_len(n)[-c(n - 1, n)]){
if(dfm[i, j] + dfm[i, j+1] + dfm[i, j+2] == 3){
my_matrix[i, j] <- "periode_ok"
my_matrix[i, j+1] <- "periode_ok"
my_matrix[i, j+2] <- "periode_ok"
}
}
}

my_matrix

关于r - 带双循环的条件和行列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44932246/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com