проблема с "если условие" в r - ошибка присвоения значений - PullRequest
0 голосов
/ 20 сентября 2019

Я делаю, если условие и я хочу сопоставить значения из 2 разных столбцов, и если они совпадают, это должно присвоить значение другому столбцу.когда я пишу заявление

for (l in 1:k) { 
  for(i in 1:n) { 
    if(y_related[i,2]==con_f[l]) {
      y_out[l]=y_related[i,1] 
    }
  }
} 

, тогда оно не работает!но если я заменил con_f на его числовое значение, скажем, 0,004, то это работает.но я хотел запустить его автоматически, так как не хочу каждый раз записывать числовое значение !!

подробный пример:

y_related=matrix(NA,1000,2) 
y_related[,1]=rnorm(1000,5,10) 
y_related[,2]=rank(y_related[,1])/1000 
con_f=matrix(NA,250,1) 
for(x in 1:250) { 
  con_f[x]=(1-((x-1)/250))
}
y_out=matrix(NA,250,1) 
for (l in 1:250) { 
  for(i in 1:1000) { 
    if(y_related[i,2]==con_f[l]) {
      y_out[l]=y_related[i,1]
    }
   }
}

1 Ответ

0 голосов
/ 20 сентября 2019

Это звучит как работа для функции слияние

# Turn them in to data frames, and rename to sensible names
y_related_df <- as.data.frame(y_related)
names(y_related_df) <- c("value", "variable")
con_f_df <- as.data.frame(con_f)
names(con_f_df) <- c("variable")

# merge allows you to join on a vector of variables, and then move the data from
# y in to x as we've done a left join (all.x=TRUE)
output <- merge(x=con_f_df, y=y_related_df, by="variable", all.x=TRUE)
output

Если вы не знакомы с различными типами объединений, взгляните на это сообщение stackoverflow

merge очень очень полезно, я использую его все время

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...