Добавьте новый набор переменных, используя цикл for с левым соединением в R

#r #for-loop

Вопрос:

Я пытаюсь отработать цикл for в R. Но что-то пошло не так, и цикл перезаписывает данные

Это входные данные

 > dput(data)
structure(list(ym = c(201809L, 201809L), hd_001 = c("YA01", "YA01"
), KeyIdOrg = c("16940.200812.0.10.20100831", "4000.201203.1.10.20150313"
), prevKeyIdOrg = c("16940.200812.0.10.20100831", "4000.201103.1.10.20150313"
), prevKeyIdOrg2 = c("16940.200612.0.10.20100831", "4000.201203.1.10.20150313"
)), class = "data.frame", row.names = c(NA, -2L))
 
 pykey = "prevKeyIdOrg"
key = "KeyIdOrg"
colNames = c("ym", "hd_001", "prevKeyIdOrg", "KeyIdOrg", "prevKeyIdOrg2")
 

Это сценарий, который я написал

   
  pykey = c("prevKeyIdOrg", "prevKeyIdOrg2")
  for (i in 1:length(pykey)){
    pyData = data[!is.na(data[, key]), c(key, colNames)] %>% 
    distinct(.)
 
    j = pykey[i]
    names(pyData) = paste0(strrep("p", i), names(pyData))
    names(pyData)[names(pyData) == paste0(strrep("p", i), key)] = j
    print(names(pyData))
    
    pyData = pyData[!is.na(pyData[, j]), ] %>% 
      distinct(.)
    
    result = data %>% 
      left_join(., pyData, by = j) %>% 
      distinct(.)
  }
 

В результате данные перезаписываются, и я не знаю, где обратиться к этой части.

 > result
      ym hd_001                   KeyIdOrg               prevKeyIdOrg              prevKeyIdOrg2    pym phd_001              pprevKeyIdOrg
1 201809   YA01 16940.200812.0.10.20100831 16940.200812.0.10.20100831 16940.200612.0.10.20100831 201809    YA01 16940.200812.0.10.20100831
2 201809   YA01  4000.201203.1.10.20150313  4000.201103.1.10.20150313  4000.201203.1.10.20150313     NA    <NA>                       <NA>
3 201809   YA01 16940.200812.0.10.20100831 16940.200812.0.10.20100831 16940.200612.0.10.20100831     NA    <NA>                       <NA>
4 201809   YA01  4000.201203.1.10.20150313  4000.201103.1.10.20150313  4000.201203.1.10.20150313     NA    <NA>                       <NA>
                 pKeyIdOrg.1             pprevKeyIdOrg2   ppym pphd_001            ppprevKeyIdOrg              ppKeyIdOrg.1
1 16940.200812.0.10.20100831 16940.200612.0.10.20100831     NA     <NA>                      <NA>                      <NA>
2                       <NA>                       <NA>     NA     <NA>                      <NA>                      <NA>
3                       <NA>                       <NA>     NA     <NA>                      <NA>                      <NA>
4                       <NA>                       <NA> 201809     YA01 4000.201103.1.10.20150313 4000.201203.1.10.20150313
            ppprevKeyIdOrg2
1                      <NA>
2                      <NA>
3                      <NA>
4 4000.201203.1.10.20150313
 

Кто-нибудь может мне в этом помочь? Я хочу, чтобы результат был добавлен, а не перезаписан

Комментарии:

1. Я хотел бы помочь, но честно признаюсь, что не понимаю, к чему вы стремитесь. Можете ли вы описать простыми словами, какого результата вы хотите достичь?

2. Я перефразировал свой вопрос и надеюсь, что теперь его легче понять.

3. Пожалуйста, поделитесь тем, как вы хотите, чтобы ожидаемый результат выглядел в описании вашего вопроса.

4. Да! Я добавил в свое описание вопроса.

5. К сожалению, это все еще очень запутанно. Я пытался проанализировать ваш код, но не могу понять, чего вы ожидаете. Я понимаю, что это попытка скопировать значения из одной переменной в другую новую. Но очень неясно, какие переменные вы хотите видеть во фрейме данных после всей этой операции. Можете ли вы написать это прямо, например, так, у меня теперь есть следующие переменные ym, hd_001, KeyIdOrg ... . После запуска программы я ожидаю, что у меня будут следующие переменные ym, hd_001, KeyIdOrg, pKeyIdOrg1, pKeyIdOrg2 ... , которые будут содержать значения переменных ….