我有一个指定“桥牌游戏”的数据框(每一行都是一个独立的游戏),请参见下面的 4 个游戏的最小示例:
start <- list(c("10","15","5"), c("5") ,c("11","6"),c("6","11"))
end <- list(c("7","17","11"), c("10"), c("8","12"),c("8","12"))
ascending <- c("+","-","+","-")
position <- c(11,6,9,8)
desired_output <- c(5,5,"disqualified",3)
bridge_game <- data.frame(start = I(start), end = I(end), ascending = ascending, position = position, desired_output = desired_output)
bridge_game
桥牌游戏如何运作? 全世界的考生都参加了桥牌比赛挑战,我们在数据框中收集了每场桥牌比赛的数据。每座桥都由编号的木板(不一定必须从 1 开始的正整数)和破碎板的“间隙”组成。候选人可以选择他从桥的哪一侧开始步行(升序 = 面板编号随着步行的进行而增加;或下降 = 面板的编号随着步行的进行而减少)。
可以在此处找到用于更好地理解桥牌游戏的图形(以数据框中的第一行为例): 单击此处
对于每个桥牌游戏(= 数据框中的行),我们有以下信息(= 列):
- bridge_game$ start : 整块木板的所有起始位置(随机顺序)
- bridge_game$ end : 整块木板的所有结束位置(随机顺序)
- bridge_game$升序:以面板升序 (+) 或降序 (-) 的顺序穿过桥
- bridge_game$ position : 候选人最终出现在指定的小组中
挑战是什么? 我需要编写一个脚本,我可以在整个数据帧上逐行运行以获得以下输出:
- bridge_game$ desired_output : 测试候选人是否掉入河中(最终在一个破碎的面板上并被“取消资格”)。如果他没有被取消资格,我需要计算候选人步行所覆盖的整个木板的数量(破损的木板不算在内)。
重要的是,它应该适用于任何数量的整块木板。
更准确地说,我将逐步说明所请求的 R 脚本应如何在下面运行:
0) 解决了
a) 将字符列表转换为 bridge_game$start 和 bridge_game$end 列的数字列表。
b) 计算i(整个木板的区域数;每行i从1到i=max)并对开始和结束位置进行排序以获得每个i的正确开始和结束值。
1)测试位置是否在损坏的面板上:end(i=1 to max-1) > position > start(i=2 to max) --> if TRUE for any of the test pairs --> "disqualified"
2)如果不是,测试给定位置位于整个面板的哪个区域(i = n): start(i=1 to max) <= position <= end(i=1 to max) --> if TRUE 回馈我 (= n)
3)
a) 应用此公式(如果方向为升序“+”且 n = 1):输出 = 位置 - 开始(i=1)+ 1
b) 应用此公式(如果方向为下降“-”且 n = i max):输出 = end(i=max) - position + 1
c) 应用这个公式(如果方向是升序“+”并且 n > 1):输出 = 位置 - 开始(i=1)+ 1 -(开始(i=2 到 n) - 结束(i=1 到 n- 1) - 1x[n-1])
d) 应用这个公式(如果方向是下降的“-”并且 n < i max):output = end(i=max) - position + 1 - (start(i=n+1 to max) - end(i=n到 max-1) - 1x[i=max - n])
我希望我在那里得到了数学。为了检查正确的输出,我在“bridge_game”数据框中创建了一个“desired_output”列。
谢谢你的帮助!