#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 ...
, которые будут содержать значения переменных ….