我试图找到一种方法来判断一系列数字是否存在于一个向量中.

我正在研究数据帧中的相关性,并且我正在使用‘for’循环来绘制所有变量对.然而,我正在试图找到一种方法来避免每一对都被绘制两次.我的 idea 是创建每列索引的序列,将它们存储在一个向量中,以便在每次绘制之前判断向量中是否已经存在该序列,如果存在,则命令循环跳过它.

这是我想要的一个例子:

假设我在数据帧‘data’中有以下变量:

Var1 Var2 Var3 Var4
0 1 0 4
2 3 2 5
5 4 5 0
2 5 1 1

我想要根据每个变量绘制每个变量的图,但如果我进行循环,结果将是每对变量两次,如下例所示:


for (i in 1:4){
  for (j in 1:4){
      if (j == i){
      next
    }
      plot(x = DATA[,i],
         y = DATA[,j],
         xlab = colnames(DATA)[i],
         ylab = colnames(DATA)[j])
  }
}

本例为每对变量提供两次,一次使用Var1作为x,Var2作为y,第二次使用Var1作为y,Var2作为x,依此类推.

我想避免这种情况,因为在我原来的嵌套框架中有几十个变量.因此,我想创建一个具有两个索引的数字序列,存储在每个循环开始时搜索的向量中,如果找到该序列,则循环跳到下一次迭代.

我try 了以下方法,但没有奏效:

vector_test <- c(0)

for (i in 1:4){
  for (j in 1:4){
      test1 <- c(0,i,j,0)
      test2 <- c(0,j,i,0) #to have both orders possible
      if (j == i){
          next
       }
       if (test1 %in% vector_test){
          next
       }
       if (test2 %in% vector_test){
          next
       }
       vector_test <- c(vector_test, test1, test2) #adding to the test vector to check in the next iteration
        plot(x = Data_total_VF[,i],
             y = Data_total_VF[,j],
             xlab = colnames(Data_total_VF)[i],
             ylab = colnames(Data_total_VF)[j])
      }
    }

我在"测试"的末尾和开头添加了0,以避免因向量中两个数字随机相邻而跳过.

我还try 了:

if ((test1 %in% vector_test) == TRUE{
          next
       }

它给我的两次错误都是:

Error in if (test1 %in% vector_test) { : the condition has length > 1

Error in if ((test1 %in% vector_test) == TRUE) { : 
  the condition has length > 1

我一直找不到另一个运营商,或者这个网站上的另一个例子来做这件事.

有谁有主意吗?

非常感谢.

推荐答案

使用combn:

combns <- combn(1:4, 2, simplify = FALSE)

for (ij in combns){
  i <- ij[[1]]
  j <- ij[[2]]
  plot(x = DATA[,i],
       y = DATA[,j],
       xlab = colnames(DATA)[i],
       ylab = colnames(DATA)[j])
}

R相关问答推荐

按崩溃类别分类的指数

使用sensemakr和fixest feols模型(R)

编码变量a、b、c以匹配来自另一个数据点的变量x

x[[1]]中的错误:脚注越界

将复杂的组合列表转换为数据框架

如何计算前一行的值,直到达到标准?

如何将旋转后的NetCDF转换回正常的纬度/经度网格,并使用R?

将嵌套列表子集化为嵌套列表

在R中将特定列的值向右移动

一小时满足条件的日期的 Select

使用data.table::fcase()而不是dplyr::case_When()时保持值

如何在科学记数法中显示因子

汇总数据的Sheffe检验的P值(平均值和标准差)

仅在R中的数据集开始和结束时删除所有 Select 列的具有NA的行

减go R中列表的所有唯一元素对

`-`是否也用于数据帧,有时使用引用调用?

如何在使用因子时获得Sankey图的Scale_Fill_Viridis的全范围

ArrangeGrob()和类似的替代方法不接受Grob列表.在Grid.Draw,返回:glist中的错误(...):仅允许在glist";中使用Grobs;

随机生成样本,同时在R内的随机样本中至少包含一次所有值

当y为负值时,无法使stat_cor正确定位到底部?