以下是对情况的完整解释。我的代码似乎对理解我想要的内容没有多大帮助,所以我试着用文字描述它:
我让人们进行了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
}
}
答案 0 :(得分:0)
请告诉我它是否符合你的要求。因为我不确定我是否理解整个问题(检查结果的最后3个字母)。
如果它是你想要的,我可以更深入地解释
dat_A08 <- read.table(text ="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;",sep=";",header=TRUE)
max_values <- setNames(aggregate(Value ~ Round,dat_A08,max) ,c("Round","max_value"))
min_values <- setNames(aggregate(Value ~ Round,dat_A08,min) ,c("Round","min_value"))
n_values <- as.data.frame(table(dat_A08[,c("Value","Round")]))
dat_A08b <- merge(dat_A08 ,min_values)
dat_A08b <- merge(dat_A08b,max_values)
dat_A08b <- merge(dat_A08b,n_values)
dat_A08b$is_max <- dat_A08b$Value == dat_A08b$max_value
dat_A08b$is_min <- dat_A08b$Value == dat_A08b$min_value
dat_A08b$somebody_has_same_value <- dat_A08b$Freq > 1
# Round Value Mode Amount At_time In_stage Success participant_code GroupID BidToValue GebAlsHoechstb min_value max_value Freq is_max is_min
# 1 5 37 2 37 264.558.881.688.118 1 1 p4 1 1 NA 37 45 2 FALSE TRUE
# 2 5 37 2 38 265.961.394.166.946 2 1 p4 1 2 NA 37 45 2 FALSE TRUE
# 3 5 40 2 60 2.589.505.194.664 2 1 p11 2 2 NA 37 45 3 FALSE FALSE
# 4 5 40 2 40 252.504.601.478.577 1 1 p11 2 1 NA 37 45 3 FALSE FALSE
# 5 5 40 2 61 266.139.678.239.822 2 1 p11 2 2 NA 37 45 3 FALSE FALSE
# 6 5 41 2 41 264.537.857.723.236 1 1 p10 1 1 NA 37 45 1 FALSE FALSE
# 7 5 45 2 45 257.754.272.294.044 1 1 p3 2 1 NA 37 45 1 TRUE FALSE
# somebody_has_same_value
# 1 TRUE
# 2 TRUE
# 3 TRUE
# 4 TRUE
# 5 TRUE
# 6 FALSE
# 7 FALSE