Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/70.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 根据复杂条件创建新列_R_Dataframe_Boolean - Fatal编程技术网

R 根据复杂条件创建新列

R 根据复杂条件创建新列,r,dataframe,boolean,R,Dataframe,Boolean,下面是对情况的完整解释。我的代码似乎对理解我想要的东西没有多大帮助,所以我尝试用文字来描述它: 我让人们进行5轮拍卖,他们与另一名参与者配对,每一轮都有一定的(随机的,每轮不同的)“价值”。他们每个人都可以按自己的意愿出价(“金额”)。同时还保存了投标的时间以及投标是否成功的信息。我最终想知道的是,价值最高的人是否赢得了拍卖(=出价最高[平局时是第一个出价]) 为此(也是为了实践),我首先想创建一个列,在其中检查组中是否出现了相同的值(“0”)。在此过程中,我想我还可以检查玩家是否有两个值中较高

下面是对情况的完整解释。我的代码似乎对理解我想要的东西没有多大帮助,所以我尝试用文字来描述它:

我让人们进行5轮拍卖,他们与另一名参与者配对,每一轮都有一定的(随机的,每轮不同的)“价值”。他们每个人都可以按自己的意愿出价(“金额”)。同时还保存了投标的时间以及投标是否成功的信息。我最终想知道的是,价值最高的人是否赢得了拍卖(=出价最高[平局时是第一个出价])

为此(也是为了实践),我首先想创建一个列,在其中检查组中是否出现了相同的值(“0”)。在此过程中,我想我还可以检查玩家是否有两个值中较高(“1”)或较低(“1”)的值。为此,我希望遍历行,检查条件,并将相应的值写入新列

下面是旧的解释

我正在尝试创建一个新列,如果同一轮中的某个人在“value”列中的值较低、相同或较高,则该列的值应为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
  }
}
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()值,因为它在整轮中都是一样的,但是我想不出一个更简单的方法来从中得到一个值(可能)向量,我很抱歉,我真的不明白你在那里做了什么:/我会编辑我的问题,让它更清楚我到底想要什么。谢谢!