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

R 滚动比较以创建新列

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] <

我是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] < 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