识别各列中的模式并总计分数

时间:2019-06-18 05:05:33

标签: r count sum

我希望能检测出跨列的2s的特定模式,总共提供2个问题,即每个学生(Ids)在2个问题中有多少是正确的。

要求学生陈述6种旅行技术(斜道,李,早期,Wait48,太阳能和康恩)中的哪一种在5种天气情况中都高度适用。

正确答案是: Storm-Wait48,Lee-Lee,Persistent-Conn,早湿和太阳能,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”的附加列,该列为学生1 2和3显示2分,为学生4和5显示0分,为学生6和7显示1分?

在此先感谢您的帮助

1 个答案:

答案 0 :(得分:1)

使用我整理的数据,我可以向您展示这些原理:

# 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]))

这将遍历每一行,并获得确切的2s数。然后,您可以将该列除以2以获得点值,因为每个2指针都相当于1点:

df$points <- df$Count_2/2

这是你的工作吗?

编辑:

正如akrun在评论中指出的那样,rowMeans(df[-1] == 2)比apply函数更好。