【发布时间】:2022-01-08 02:25:19
【问题描述】:
我有一个像下面这样的数据,如果你在 excel 中看到公式,它会将行中的第二个元素与 if 语句中的第一个元素进行比较,然后循环继续进行下一次迭代。
我在这里粘贴了 6 行。像这样,我的数据框中有很多行。遇到这种情况怎么写脚本?
【问题讨论】:
我有一个像下面这样的数据,如果你在 excel 中看到公式,它会将行中的第二个元素与 if 语句中的第一个元素进行比较,然后循环继续进行下一次迭代。
我在这里粘贴了 6 行。像这样,我的数据框中有很多行。遇到这种情况怎么写脚本?
【问题讨论】:
这段代码解决了我的问题
for(i in 1:nrow(df)){
if(df$Key[i]==df$Key[i+1] & df$Month_Year[i]==df$Month_Year[i+1]){
df$Condition[i]="True"
}else {
df$Condition[i]="False"
}
}
for(j in 1:nrow(df)){
if(df$Condition[j]=="True"){
if(df$Date[j]==df$Date[j+1]){
df$Lead.Time[j]=0
}else{
df$Lead.Time[j]= df$Date[j+1]-df$Date[j]
}
}else {
df$Lead.Time[j]=0
}
}
【讨论】:
我想你是在问是否可以遍历数据行并检查每个第二个元素是否等于每个第一个元素?
如果是这样,我将以编程方式执行此操作的方式是在一个步骤中循环遍历行:
data=data.frame(Date=c(1,1,2,4,4),Time=c(2,2,3,4,4))
as_far_as=nrow(data)-1
for(i in 1:as_far_as){
print(data$Date[i])
print(data$Date[i+1])
}
[1] 1
[1] 1
[1] 1
[1] 2
[1] 2
[1] 4
[1] 4
[1] 4
as_far_as=nrow(data)-1
for(i in 1:as_far_as){
print(data$Date[i])
print(data$Date[i+1])
}
上面我正在循环遍历行并要求它打印每个第一个元素 (data$Date[i]),然后是每个第二个元素 (data$Date[i+1])
如果我想在其中引入布尔逻辑,我会这样做:
as_far_as=nrow(data)-1
for(i in 1:as_far_as){
if(data$Date[i]==data$Date[i+1] & data$time[i]==data$time[i+1]){
print('dates are the same')
}else{
data$Date[i]=data$Date[i]-data$Date[i+1]
}
}
我不知道你到底在问什么,因为我不擅长,但尝试使用上面的代码和 if 语句 if(x==y){...}else{...} 来得到你想要的。
【讨论】:
for(i in 1:as_far_as){print(i);print(i+1)} 给你1,2,2,3,3,4,4,5,5,6.....
data=data.frame(Data=c('30-01-09',...),Key=c('XYZ',...))为自己制作一个示例数据框