R 不同列中的参考值
这个问题最好通过例子来回答。我在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
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”列