У меня есть датафрейм:
results 2 (612 obs. 281 variables)
ID Q1000_p2000_2016 Q1893_p2039_2016 .... Q1000_p2000_2017 Q1893_p2039_2017
1 392 381 422 351
2 432 293 398 310
. . . . .
. . . . .
, если есть 140 вопросов из 2016 года и 140 из 2017 года, каждый год вопросы имеют одно и то же имя, но каждое имя переменной имеет "_2016"
или "_2017"
в конце, чтобы различать периоды времени.
и другой фрейм данных:
absdiff (0 obs. 141 variables)
ID Q1000_p2000 Q1893_p2039 ....
Я хочу присвоить значение в absdiff, взяв абсолютную разницу двух лет, для каждого вопроса для каждого ID
.
В моем состоянии я проверяю, соответствует ли номер вопроса на 2016 год (или первые несколько символов имени переменной) номеру вопроса на 2017 в результатах2.
Если это так, я хочу присвоить абсолютную разницу двух ответов соответствующей переменной / номеру вопроса в absdiff
Я использовал
for (q in 2:141){
if (substr(colnames(results2[q]),1,12) == substr(colnames(results2[q+140]),1,12)){
for (j in 1:nrow(results2)){absdiff$substr(colnames(results2[q]),1,11) <- abs(results2[j,q] - results2[j,(q+140)])}
}
else
print("ERROR")
}
но я получаю это сообщение об ошибке:
Ошибка в absdiff $ substr (имена столбцов (результаты2 [q]), 1, 11) <- abs (результаты2 [j,:
неверная функция в сложном назначении </p>
Какая проблема вызывает это сообщение об ошибке? Как мне это исправить?
Ради репликации все это можно упростить до:
ID <- c(1,2)
Q1000_p2000_2016 <- c(392,432)
Q1893_p2039_2016 <- c(381,293)
Q1000_p2000_2017 <- c(422,398)
Q1893_p2039_2017 <- c(351,310)
results2 <- as.data.frame(cbind(ID, Q1000_p2000_2016, Q1893_p2039_2016 ,Q1000_p2000_2017, Q1893_p2039_2017 ))
absdiff <- results2[FALSE,1:3]
for (q in 2:3){
if (substr(colnames(results2[q]),1,12) == substr(colnames(results2[q+2]),1,12)){
for (j in 1:nrow(results2)){absdiff$substr(colnames(results2[q]),1,11) <- abs(results2[j,q] - results2[j,(q+2)])}
}
else
print("ERROR")
}