Распознавание шаблонов по столбцам и подведение итогов - PullRequest
1 голос
/ 18 июня 2019

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

Студентов попросили указать, какиеиз 6 методов передвижения (Chute, Lee, Early, Wait48, Solar & Conn) очень применимы в каждом из 5 сценариев погоды.

Правильные ответы: Storm-Wait48, Wind-Lee, Persistent-Conn,Wet-Early & Solar, Ldry-Chute

Если учащиеся правильно определили высоко применимую стратегию (показанную цифрой 2) в соответствии с ключом, указанным выше, они должны получить 1 очко.Если они сделали это в обоих сценариях, они должны получить 2 очка.

# Note: the numbers relate to the student's selected responses as follows:
# 0= Not applicable, 1= Somewhat Applicable, 2= Highly applicable, NA = 
Don't know
WeatherScen1 <- c('storm', 'persistent', 'wet', 'wet', 'storm', 'wind', 
'Ldry')
Solar1 <- c(0, 1, 2, 0, 0, NA, 2)
Conn1 <- c(1, 2, 0, 2, 0, NA, 1)
Chute1 <- c(1, 1, 1, 2, 2, NA, 1)
Early1 <- c(0, 1, 2, 1, 1, NA, 2)
Wait481 <- c(2, 0, 0, 2, 1, NA, 2)
Lee1 <- c(1, 1, 1, 0, 1, NA, 1)
WeatherScen2 <- c('wet', 'wet', 'wind', 'storm', 'Ldry', 'storm', 
'persistent')
Solar2 <- c(2, 2, 0, 0, 0, 1, 0)
Conn2 <- c(0, 0, 1, 1, 0, 1, 2)
Chute2 <- c(1, 1, 1, 1, 1, 1, 1)
Early2 <- c(2, 2, 1, 1, 1, 1, 0)
Wait482 <- c(0, 0, 1, 1, 1, 2, 0)
Lee2 <- c(1, 1, 2, 1, 1, 1, 0)

WeatherScenResp <- data.frame(WeatherScen1, Solar1, Conn1, Chute1, Early1, 
Wait481, Lee1, WeatherScen2, Solar2, Conn2, Chute2, Early2, Wait482, Lee2)
View(WeatherScenResp)

Id WeatherScen1 Solar1 Conn1 Chute1 Early1 Wait481 Lee1... 
1  Storm        0      1     1      0      2       1   ... 
2  Persistent   1      2     1      1      0       1   ... 
3  Wet          2      0     1      2      0       1   ...
4  Wet          0      2     2      1      2       0   ... 
5  Storm        0      0     2      1      1       1   ... 
6  Wind         NA     NA    NA     NA     NA      NA  ... 
7  Ldry         2      1     1      2      2       1   ... 


...WeatherScen2 Solar2 Conn2 Chute2 Early2 Wait482 Lee2
...Wet          2      0     1      2      0       1
...Wet          2      0     1      2      0       1
...Wind         0      1     1      1      1       2
...Storm        0      1     1      1      1       1
...Ldry         0      0     1      1      1       1
...Storm        1      1     1      1      2       1
...Persistent   0      2     1      0      0       0 

Как создать дополнительный столбец, который называется что-то вроде «TotalCorrect», в котором будут отображаться 2 балла для студентов 1, 2 и 3, 0 баллов для студентов 4 и 5 и 1 балл для студентов 6 и 7?

Большое спасибо заранее за вашу помощь

1 Ответ

1 голос
/ 18 июня 2019

Используя данные, которые я составил, я могу показать вам принципы:

# create dataframe
df <- data.frame(ID = 1:7, A1 = sample(0:2, 7, T), A2 = sample(0:2, 7, T))

#  ID A1 A2
#1  1  1  0
#2  2  0  2
#3  3  2  1
#4  4  2  0
#5  5  2  0
#6  6  1  2
#7  7  2  1

Теперь перебираем каждую строку и подсчитываем число 2 (кроме первого столбца)

df$Count_2 <- apply(df[, -1], 1, function(x) length(x[x==2]))

Это будет проходить через каждый ряд и получить точное число 2 с. Затем вы можете разделить этот столбец на 2, чтобы получить значение балла, поскольку каждый указатель 2 стоит 1 балл:

df$points <- df$Count_2/2

Это делает то, что вы ищете?

Изменить:

Как указал Акрун в комментариях, rowMeans(df[-1] == 2) - лучший способ сделать это, чем функция apply.

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