Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/79.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_If Statement_Dataframe - Fatal编程技术网

R 不同列中的参考值

R 不同列中的参考值,r,if-statement,dataframe,R,If Statement,Dataframe,这个问题最好通过例子来回答。我在R中有以下数据帧: date SPX.Index.1stM.100..MnySPXindexprice day c 1 2005-01-03 12.00050 1202.084 Monday 1202.084 2 2005-01-04 11.90630 1188.045 Tuesday 1188.045 3 2005-01-05 12.03420 1183.737

这个问题最好通过例子来回答。我在R中有以下数据帧:

  date  SPX.Index.1stM.100..MnySPXindexprice day    c
1   2005-01-03  12.00050    1202.084    Monday          1202.084
2   2005-01-04  11.90630    1188.045    Tuesday         1188.045
3   2005-01-05  12.03420    1183.737    Wednesday   1183.737
4   2005-01-06  11.52000    1187.885    Thursday    1187.885
5   2005-01-07  11.15550    1186.193    Friday          1190.000
6   2005-01-08  11.08770    1190.245    Saturday    1190.245
7   2005-01-09  11.08770    1190.245    Sunday      1190.245
8   2005-01-10  11.08770    1190.245    Monday          1190.245

如果那天是“星期五”,我想返回星期一的SPXindexprice值,其位置与星期五相同。因此,在上面的示例中,在第5行中,我将有一个值为1202.084的新列(day列中的星期一),希望这是有意义的?

这里有一个Python解决方案:

df = open("dataframe.txt").read()
splitData = df.split("\n")
out = open("output.txt", "w")

for row in splitData:
  splitRow = row.split()
  if len(splitRow) >= 4:
    if splitRow[4] == "Monday":
      mondayValue = splitRow[3]

      out.write(str(splitRow[0]) + "\t"
      + str(splitRow[1]) + "\t"
      + str(splitRow[2]) + "\t"
      + str(splitRow[3]) + "\t"
      + str(splitRow[4]) + "\t"
      + str(splitRow[5]) + "\n")

    elif splitRow[4] == "Friday":
      out.write(str(splitRow[0]) + "\t"
      + str(splitRow[1]) + "\t"
      + str(splitRow[2]) + "\t"
      + str(mondayValue) + "\t"
      + str(splitRow[4]) + "\t"
      + str(mondayValue) + "\n")

    else:
      out.write(str(splitRow[0]) + "\t"
      + str(splitRow[1]) + "\t"
      + str(splitRow[2]) + "\t"
      + str(splitRow[3]) + "\t"
      + str(splitRow[4]) + "\t"
      + str(splitRow[5]) + "\n")
输出以制表符分隔:

row date    SPX.Index   1stM.100    MnySPXindexprice    day
1   2005-01-03  12.0005 1202.084    Monday  1202.084
2   2005-01-04  11.9063 1188.045    Tuesday 1188.045
3   2005-01-05  12.0342 1183.737    Wednesday   1183.737
4   2005-01-06  11.52   1187.885    Thursday    1187.885
5   2005-01-07  11.1555 1202.084    Friday  1202.084
6   2005-01-08  11.0877 1190.245    Saturday    1190.245
7   2005-01-09  11.0877 1190.245    Sunday  1190.245
8   2005-01-10  11.0877 1190.245    Monday  1190.245

如果数据帧按日期排序,则可以尝试以下方法:

#reproducible dataframe
df <- read.table(text="date  SPX.Index MnySPXindexprice day    c
                 2005-01-03  12.00050    1202.084    Monday          1202.084
                 2005-01-04  11.90630    1188.045    Tuesday         1188.045
                 2005-01-05  12.03420    1183.737    Wednesday   1183.737
                 2005-01-06  11.52000    1187.885    Thursday    1187.885
                 2005-01-07  11.15550    1186.193    Friday          1190.000
                 2005-01-08  11.08770    1190.245    Saturday    1190.245
                 2005-01-09  11.08770    1190.245    Sunday      1190.245
                 2005-01-10  11.08770    1190.245    Monday          1190.245",
                 header=TRUE)

#assign monday row
df$MondayValue <- 
  ifelse(df$day!="Friday", NA,
         df[as.numeric(rownames(df[ df$day=="Friday",]))-4,"MnySPXindexprice"])
#可复制数据帧

df你是说R编程语言吗?真的很欣赏它,但是有可能用R提供解决方案吗?如果不清楚,很抱歉。我可以,但我在R中速度较慢。如果您将问题的标题编辑为“R中的if条件”,并将问题标记为“dataframe”“R”等,您将更快得到答案。非常感谢您的帮助,我已更改了标题。即使在excel中,这对我来说也是一个问题。我不得不手工做很多计算!我认为这是可行的。它将创建一个新的data.frame,其中包含每个星期一的值。但是我如何将它放回正确位置的原始data.frame中呢?即,将新的星期一值放在星期五值旁边?而且新data.frame中只有一列,即“c”列