如何在R中不进行排列的情况下执行DF的两列的交互?

如何在R中不进行排列的情况下执行DF的两列的交互?,r,ggplot2,dplyr,R,Ggplot2,Dplyr,我在R中有一个data.frame,它有区域对的值。可以使用以下代码构造第一列: region.1 <- c("SE", "SE", "SW", "S", "SW") region.2 <- c("SW", "S", "SE", "SE", "SE") x <- c(1,2,3,4,5) y <- c(1,3,2,4,1) df <- data.frame(x,y,region.1,region.2) 然而,一旦考虑到相同交互的排列,结果就不是我所期望的 例

我在R中有一个data.frame,它有区域对的值。可以使用以下代码构造第一列:

region.1 <- c("SE", "SE", "SW", "S", "SW")
region.2 <- c("SW",  "S", "SE", "SE", "SE")
x <- c(1,2,3,4,5)
y <- c(1,3,2,4,1)

df <- data.frame(x,y,region.1,region.2)
然而,一旦考虑到相同交互的排列,结果就不是我所期望的

例如,有SW.SE和SE.SW组


我想问的是,我如何才能以智能的方式,在没有排列的情况下,将对分组。

使用示例数据,您可以
在行上应用
,然后
对区域进行排序,然后
将它们折叠成一个交互项,如下所示:

df$interaction <- apply(df, 1, function(x){paste(sort(c(x[3],x[4])), collapse = ".")})
ggplot(data=df, aes(x=x, y=y))+
  geom_point(size=5,aes(color=interaction))

df$interaction使用示例数据,您可以
对行应用
,然后
对区域排序
,然后
将它们折叠成一个交互术语,如下所示:

df$interaction <- apply(df, 1, function(x){paste(sort(c(x[3],x[4])), collapse = ".")})
ggplot(data=df, aes(x=x, y=y))+
  geom_point(size=5,aes(color=interaction))

df$interaction这里有两个基于
dplyr
的选项。两者都涉及对每个(x,y)对的两个区域的值进行排序。第一种方法使用
mutate
粘贴排序后的值,使用
rowwise
完成。第二种方法是使用
collect
创建一列区域,按(x,y)成对排列,然后通过将区域粘贴在一起来汇总这些区域

库(tidyverse)
区域1#A tible:5 x 5
#>x y区域。1区域。2相互作用
#>                
#>东南西南
#>东南
#>3 3 2西南东南西南
#>东南
#>东南西南5 1
ggplot(df_interactit1,aes(x=x,y=y,color=interactive))+
几何点(尺寸=5)

df_交互作用2%
聚集(键=区域,值=值,区域.1,区域.2)%>%
(x,y)%>%
排列(值)%>%
总结(交互=粘贴(最小(值)、最大(值)、sep=“.”)%>%
解组()
df_2
#>#tibble:5 x 3
#>x-y相互作用
#>        
#>东南
#>东南偏南23
#>东南偏南
#>东南偏南
#>东南5 1
ggplot(df_interactis2,aes(x=x,y=y,color=interactive))+
几何点(尺寸=5)


由(v0.2.0)于2018年5月22日创建。

这里有两个基于dplyr的选项。两者都涉及对每个(x,y)对的两个区域的值进行排序。第一种方法使用
mutate
粘贴排序后的值,使用
rowwise
完成。第二种方法是使用
collect
创建一列区域,按(x,y)成对排列,然后通过将区域粘贴在一起来汇总这些区域

库(tidyverse)
区域1#A tible:5 x 5
#>x y区域。1区域。2相互作用
#>                
#>东南西南
#>东南
#>3 3 2西南东南西南
#>东南
#>东南西南5 1
ggplot(df_interactit1,aes(x=x,y=y,color=interactive))+
几何点(尺寸=5)

df_交互作用2%
聚集(键=区域,值=值,区域.1,区域.2)%>%
(x,y)%>%
排列(值)%>%
总结(交互=粘贴(最小(值)、最大(值)、sep=“.”)%>%
解组()
df_2
#>#tibble:5 x 3
#>x-y相互作用
#>        
#>东南
#>东南偏南23
#>东南偏南
#>东南偏南
#>东南5 1
ggplot(df_interactis2,aes(x=x,y=y,color=interactive))+
几何点(尺寸=5)


由(v0.2.0)于2018年5月22日创建。

上述解决方案工作正常,基于此,我找到了一个更快的解决方案,不需要知道数据帧上的索引,基于mutate和paste。ifelse用于选择订单:

library(dplyr)
df<-df %>% mutate (
           region.1=as.character(region.1),
           region.2=as.character(region.2),
           interact = ifelse(region.1<region.2,
                                paste(region.1,region.2,sep="."),
                                paste(region.2,region.1,sep=".")))
库(dplyr)
df%变异(
region.1=作为字符(region.1),
region.2=作为字符(region.2),

interact=ifelse(region.1以上解决方案工作正常,基于此,我找到了一个更快的解决方案,基于mutate和paste,不需要知道数据帧上的索引。ifelse用于选择顺序:

library(dplyr)
df<-df %>% mutate (
           region.1=as.character(region.1),
           region.2=as.character(region.2),
           interact = ifelse(region.1<region.2,
                                paste(region.1,region.2,sep="."),
                                paste(region.2,region.1,sep=".")))
库(dplyr)
df%变异(
region.1=作为字符(region.1),
region.2=作为字符(region.2),

交互=如果其他(region.1您的代码不会复制链接到的绘图。如果您运行代码,则
x=5
处的点对应于
y=3
,但是
y=1
在链接的绘图中。您的代码不会复制链接到的绘图。如果您运行代码,则
x=5
处的点对应于
y=3
,但
y=1。)在链接的绘图中。