【发布时间】:2017-06-07 16:23:55
【问题描述】:
这里是情况的完整解释。我的代码似乎对理解我想要的东西不是很有帮助,所以我尝试用文字来描述它:
我让人们进行 5 轮拍卖,他们与另一位参与者配对,每个人都有一定的(随机的,每轮不同)“价值”。他们每个人都可以根据需要出价(“金额”)。还保存了出价的时间,以及出价是否成功的信息。我最终想知道的是,价值最高的人是否赢得了拍卖(= 出价最高[并且在平局的情况下是第一个])。
为此(也是为了练习),我首先想创建一个列,在其中检查组中是否存在相同的值(“0”)。在此过程中,我想我还可以检查玩家是否具有两者中较高(“1”)或较低(“-1”)的值。为此,我想遍历行,检查条件,并将相应的值写入新列。
以下:旧解释
我正在尝试创建一个新列,如果同一轮中的某个人在“值”列中具有更低、相同或更高的值,则该列的值应为 1、0 或 -1。这里的其他问题似乎只处理非常简单的情况(或者我没有看到连接,我刚开始这个) 我尝试的是:
dat_A08["ValueIsHigher"] <- NA
for (bid in dat_A08){
if (bid$Value == max(dat_A08[dat_A08&Round == bid&Round & dat_A08&GroupID == bid&GroupID,]$Value)){
bid&ValueIsHigher = 0
} else if (bid$Value < max(dat_A08[dat_A08&Round == bid&Round & dat_A08&GroupID == bid&GroupID,]$Value)) {
bid&ValueIsHigher = -1
} else {
bid&ValueIsHigher = 1
}
}
我几乎定义了一个新列,然后尝试根据条件向它写入新值。但我得到了错误
错误:$ 运算符对原子向量无效
如何访问该值?
数据文件如下所示:
Mode;Round;Value;Amount;At_time;In_stage;Success;participant_code;GroupID;BidToValue;GebAlsHoechstb
2;5;41;41;264.537.857.723.236;1;1;p10;1;1;
2;5;37;37;264.558.881.688.118;1;1;p4;1;1;
2;5;37;38;265.961.394.166.946;2;1;p4;1;2;
2;5;40;60;2.589.505.194.664;2;1;p11;2;2;
2;5;40;40;252.504.601.478.577;1;1;p11;2;1;
2;5;45;45;257.754.272.294.044;1;1;p3;2;1;
2;5;40;61;266.139.678.239.822;2;1;p11;2;2;
整个脚本应该像这样工作:
dat_A08 = read.csv("csv_A08.csv", header = TRUE, sep = ";")
dat_A08 <- dat_A08[,!(names(dat_A08) %in% c("GebAlsHoechstb"))]
dat_A08$At_time <- as.numeric(as.character(gsub("\\.","",dat_A08$At_time)))
dat_A08["ValueIsHigher"] <- NA
for (bid in dat_A08){
if (bid$Value == max(dat_A08[dat_A08&Round == bid&Round & dat_A08&GroupID == bid&GroupID,]$Value)){
bid&ValueIsHigher = 0
} else if (bid$Value < max(dat_A08[dat_A08&Round == bid&Round & dat_A08&GroupID == bid&GroupID,]$Value)) {
bid&ValueIsHigher = -1
} else {
bid&ValueIsHigher = 1
}
}
【问题讨论】:
-
您需要提供一个可重现的示例
dput(),并且还需要一个所需输出的示例。 -
你有矩阵吗?另一种情况是您可以以不同的方式处理子集,即
data_A08$Value[data_A08&&令人困惑 -
bid 正在遍历 dat_A08 的列,我认为 OP 想要遍历行。至于与号的混乱我也不明白。
-
原则上(并且可能在大多数情况下)某个回合中的某个人的值可能低于其他人但高于另一个人,因此不清楚如何给这些 -1 0 +1。在你的循环中,你似乎测试它是否是最大值,然后测试它是否低于最大值,那么我不确定第三个选项应该是什么:)
-
哦,是的,我想遍历行,我是在遍历列吗?和号乱七八糟的是在同一组中找到同一轮中的玩家。我取了 max() 值,因为它在整个回合中都是相同的,但我想不出一种更简单的方法来从我得到的(可能)向量中获取一个值