2013-11-23 45 views
1

最好通过示例询问此问题。我有以下的数据帧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的新列(MONDAY在日栏)希望这有意义吗?

+0

你的意思是R编程语言吗? –

回答

0

下面是一个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 
+0

真的很感激它,但是有可能在R中提供解决方案吗?对不起,如果不明确。 – user2977664

+0

我可以,但是我在R中很慢。如果您将问题的标题编辑为“If Condition in R”,并用“dataframe”“R”等标记问题,则可以更快得到答案。等等。 – duhaime

+0

非常感谢您的帮助,我改变了标题。即使在excel中,这对我来说也是一个问题。我不得不手动进行大量计算! – user2977664

0

如果你的数据帧是按日期排序,那么你可以试试这个:

#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"]) 
+0

我认为这可行。它会为每个星期一的值创建一个新的数据框。但是,如何将它放回原来的正确位置的data.frame?即在周五的值旁边放置新的星期一值?并且还只有一列来自新的data.frame,列“c” – user2977664

+0

我更新了答案,再试一次。 – zx8754