У меня есть фрейм данных test :
group userID A_conf A_chall B_conf B_chall
1 220 1 1 1 2
1 222 4 6 4 4
2 223 6 5 3 2
1 224 1 5 4 4
2 228 4 4 4 4
Данные содержат ответы на пользователя ( показано userID ), где каждый пользователь может ввести любое значение междуОт 1 до 6 для обоих показателей:
Они также могут не отвечать, в результате чего NA запись.
test dataframe содержит несколько столбцов, таких как A, B, C, D и так далее.Для каждого из этих столбцов можно сообщать показатели Conf и Chall.
Я заинтересован в следующих сравнениях:
- A_conf & A_chall
- B_conf & B_chall
ЕСЛИ любые из этих мер равны, Final * Счетчик 1043 * должен быть увеличен (как показано ниже).
group userID A_conf A_chall B_conf B_chall Final
1 220 1 1 1 2 1
1 222 4 6 4 4 1
2 223 6 5 3 2 0
1 224 1 5 4 4 1
2 228 4 4 4 4 2
Я борюсь со счетчиком Final .Какой сценарий поможет мне достичь этой функциональности?
Для справки: dput из набора данных test представлен ниже:
dput (test):
структура (список (группа = c (1L, 1L, 2L, 1L, 2L),
userID = c (220L, 222L, 223L, 224L, 228L),
A_conf = c (1L, 4L, 6L, 1L, 4L),
A_chall = c (1L, 6L, 5L, 5L, 4L),
B_conf = c (1L, 4L, 3L, 4L, 4L),
B_chall = c (2L, 4L, 2L, 4L, 4L)),
class = "data.frame", row.names= c (NA, -5L))
Я попробовал код, подобный следующему:
test$Final = as.integer(0) # add a column to keep counts
count_inc = as.integer(0) # counter variable to increment in steps of 1
for (i in 1:nrow(test)) {
count_inc = 0
if(!is.na(test$A_conf[i] == test$A_chall[i]))
{
count_inc = 1
test$Final[i] = count_inc
}#if
else if(!is.na(test$A_conf[i] != test$A_chall[i]))
{
count_inc = 0
test$Final[i] = count_inc
}#else if
}#for
Приведенный выше код был написан для работы ТОЛЬКО с колонками A_conf и A_chall .Проблема в том, что он заполняет столбец Final всеми 1, независимо от того, равны ли введенные значения (пользователями) или нет.