【问题标题】:Recognizing patterns across columns and totaling up scores跨列识别模式并汇总分数
【发布时间】:2019-06-18 05:05:33
【问题描述】:

我希望跨列检测 2s 的特定模式,提供总共 2 个,每个学生 (Ids) 在 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”的附加列,它会为学生 1 2 和 3 显示 2 分,为学生 4 和 5 显示 0 分,为学生 6 和 7 显示 1 分?

非常感谢您的帮助

【问题讨论】:

  • 我很困惑,学生数据在哪里?我们怎么知道每个学生选择了什么?
  • 嗨@RAB,每一行/ID都代表一个学生。
  • 他们的选择由每个单元格中显示的 NA/0/1/2 表示。 # 0= 不适用,1= 有点适用,2= 非常适用,NA = 不知道。我只对计算他们是否正确选择了 2s 感兴趣。因此,如果学生被随机分配为湿式,他们应该在 Solar 和 Early 中获得 2,如果他们被随机分配到 Ldry,他们应该在 Chute 中获得 2。

标签: r count sum


【解决方案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]))

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

df$points <- df$Count_2/2

这是否符合您的要求?

编辑:

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

【讨论】:

  • 也许你在追rowMeans(df[-1] == 2)
  • 是的,那样会更好
  • 您好 RAB 和 akrun,非常感谢您提供的帮助。我喜欢你建议的两种方法。但是,我不希望将每行中 2 的数量相加。对于每种天气情况,2s 必须在特定的列中。即在Persistent 的WeatherScen 中,它们应该在'Conn' 列中有一个2。如果他们被赋予潮湿的天气场景,他们应该有两个 2,一个在 Solar 列中,另一个在 Early 列中(虽然这只是 Wet 的一个点)
  • 我认为如果他们正确猜到了那个组合,则分配了 2?我很困惑..:P
  • 这当然不是一个简单的例子......我会再解释一下。2代表他们所说的每种旅行技术的实例(Early,Chute,Lee...... ) 非常适用于管理每种天气情况(风暴、潮湿、风...)。一些学生在正确的情况下选择了 2(例如学生 1,2 和 3),但是一些学生错误地选择了高度适用/2(例如学生 4 和 5)。所以在我的计数栏中,我希望给一些 2 的组合而不是其他组合打分
猜你喜欢
  • 2022-09-27
  • 2013-04-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-11-05
  • 2020-01-01
相关资源
最近更新 更多