R 滚动比较以创建新列
我是R新手,正在研究如何在R中用excel做我能做的事情。我在试图确定如何创建一个新的列时遇到了麻烦,该列指示一列中的前一个值何时在第二列中的值下交叉。非常简单的时间序列分析R 滚动比较以创建新列,r,R,我是R新手,正在研究如何在R中用excel做我能做的事情。我在试图确定如何创建一个新的列时遇到了麻烦,该列指示一列中的前一个值何时在第二列中的值下交叉。非常简单的时间序列分析 val1 val2 3 2 3 2 1 2 <- Cross under 1 2 1 2 3 2 我尝试使用的代码是: for(i in 1:length(workingFile)){ if(workingFile$val1[i] <
val1 val2
3 2
3 2
1 2 <- Cross under
1 2
1 2
3 2
我尝试使用的代码是:
for(i in 1:length(workingFile)){
if(workingFile$val1[i] < workingFile$val2[i] &&
workingFile$val1[i-1] > workingFile$val2[i-1]){
XUnder<-append(XUnder,TRUE)}
else{
XUnder<-append(XUnder,NA)
}
}
for(1中的i:长度(工作文件)){
if(工作文件$val1[i]<工作文件$val2[i]&&
工作文件$val1[i-1]>工作文件$val2[i-1]){
XUnder在R中,很少需要显式的来执行
循环。R中的许多函数都是矢量化的,这意味着它们可以处理多个值,而不需要逐个传递它们的值。如果函数没有矢量化,则可以使用应用
函数族(或其他函数)它们的工作与for
循环相同
在这里,您可以直接使用比较val1
和val2
,并使用lag
比较以前的值
library(dplyr)
workingFile <- workingFile %>%
mutate(Xunder = val1 < val2 & lag(val1) > lag(val2))
workingFile
# val1 val2 XUnder
#1 3 2 FALSE
#2 3 2 FALSE
#3 1 2 TRUE
#4 1 2 FALSE
#5 1 2 FALSE
#6 3 2 FALSE
在R中,很少需要显式的来执行
循环。R中的许多函数都是向量化的,这意味着它们可以处理多个值,而不需要逐个传递它们的值。如果函数没有向量化,则可以使用应用
函数族(或其他)的方法它们的工作与for
循环相同
在这里,您可以直接使用比较val1
和val2
,并使用lag
比较以前的值
library(dplyr)
workingFile <- workingFile %>%
mutate(Xunder = val1 < val2 & lag(val1) > lag(val2))
workingFile
# val1 val2 XUnder
#1 3 2 FALSE
#2 3 2 FALSE
#3 1 2 TRUE
#4 1 2 FALSE
#5 1 2 FALSE
#6 3 2 FALSE
如果您想要基本R方法,以下是您可以做的示例:
#创建数据
df 3 1 2正确
#>412NA
#>512NA
#>6 3 2 NA
#>7 3 2 NA
由(v0.3.0)于2020年9月19日创建
此代码所做的是找到满足条件的第一行,然后使用NA
值生成一个向量,直到该点,然后将TRUE
,然后继续使用NA
值填充向量。最后将向量作为列添加到数据帧中
如果您不想将其添加到数据帧中,那么就不要运行最后一行代码。如果您想使用基本R方法,下面是一个可以执行的示例:
#创建数据
df 3 1 2正确
#>412NA
#>512NA
#>6 3 2 NA
#>7 3 2 NA
由(v0.3.0)于2020年9月19日创建
此代码所做的是找到满足条件的第一行,然后使用NA
值生成一个向量,直到该点,然后将TRUE
,然后继续使用NA
值填充向量。最后将向量作为列添加到数据帧中
如果您不想将其添加到数据帧中,那么就不要运行最后一行代码太棒了。这正是我想要的。我必须说,%>%是超级强大的。我还没有了解到这一点。对深入研究该语言肯定很兴奋。太棒了。这正是我想要的。我必须说,%>%是超级强大的.我还没学过这门语言.能更深入地研究这门语言,我真的很兴奋。
workingFile$Xunder[!workingFile$Xunder] <- NA