R 根据复杂条件创建新列
下面是对情况的完整解释。我的代码似乎对理解我想要的东西没有多大帮助,所以我尝试用文字来描述它: 我让人们进行5轮拍卖,他们与另一名参与者配对,每一轮都有一定的(随机的,每轮不同的)“价值”。他们每个人都可以按自己的意愿出价(“金额”)。同时还保存了投标的时间以及投标是否成功的信息。我最终想知道的是,价值最高的人是否赢得了拍卖(=出价最高[平局时是第一个出价]) 为此(也是为了实践),我首先想创建一个列,在其中检查组中是否出现了相同的值(“0”)。在此过程中,我想我还可以检查玩家是否有两个值中较高(“1”)或较低(“1”)的值。为此,我希望遍历行,检查条件,并将相应的值写入新列 下面是旧的解释 我正在尝试创建一个新列,如果同一轮中的某个人在“value”列中的值较低、相同或较高,则该列的值应为1、0或-1。这里的其他问题似乎只处理非常简单的情况(或者我看不出两者之间的联系,我只是从这里开始) 我尝试的是:R 根据复杂条件创建新列,r,dataframe,boolean,R,Dataframe,Boolean,下面是对情况的完整解释。我的代码似乎对理解我想要的东西没有多大帮助,所以我尝试用文字来描述它: 我让人们进行5轮拍卖,他们与另一名参与者配对,每一轮都有一定的(随机的,每轮不同的)“价值”。他们每个人都可以按自己的意愿出价(“金额”)。同时还保存了投标的时间以及投标是否成功的信息。我最终想知道的是,价值最高的人是否赢得了拍卖(=出价最高[平局时是第一个出价]) 为此(也是为了实践),我首先想创建一个列,在其中检查组中是否出现了相同的值(“0”)。在此过程中,我想我还可以检查玩家是否有两个值中较高
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
}
}
dat_A08=read.csv(“csv_A08.csv”,header=TRUE,sep=“;”)
请告诉我这是否是你想要的。因为我不确定我是否理解整个问题(检查结果的最后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
dat\u A08您需要提供一个可复制的示例dput()
以及一个所需输出的示例。您有矩阵吗?另一种情况是,你可以用不同的方法来处理子集,即,data\u A08$Value[data\u A08&
the&
是混淆的。bid在遍历dat\u A08的列时,我认为OP想遍历行。至于符号和混乱,我也不理解。原则上也有人在某个回合中(可能大部分时间)可以有一个比别人低而比别人高的值,所以不清楚如何给出这些-10+1。在循环中,你似乎要测试它是否是最大值,然后测试它是否在最大值之下,然后我不确定第三个选项应该是什么:)哦,是的,我想遍历行,是不是遍历列?符号和混乱是f在同一组的同一轮中找到一个玩家。我取max()值,因为它在整轮中都是一样的,但是我想不出一个更简单的方法来从中得到一个值(可能)向量,我很抱歉,我真的不明白你在那里做了什么:/我会编辑我的问题,让它更清楚我到底想要什么。谢谢!