使用R

时间:2017-12-04 22:19:54

标签: r dataframe duplicates

请让我用一个例子来解释我想做什么。我有一个数据框,如:

X    Y
1    1
1    2
1    3
2    1
2    2
2    3
3    1
3    2
3    3

我想将其更改为其他格式:

X1    Y1    X2    Y2
1     1     1     1
1     2     2     1
1     3     3     1
......

对于第一个表中的两行,例如X = 1,Y = 2且X = 2,Y = 1。他们只是交换彼此的价值观。所以我想把这些行放在行上,如第二个表所示,然后删除重复项。因此,“瘦而长”的表变成了“短而胖”。我知道如何使用两个for循环来做到这一点。但是在R中,这样的操作一直持续下去。那么,任何人都可以快速帮助我吗?

这是一个最小的例子:

原始表是:

X    Y
1    2
2    1

我想要的转移表就像:

X1    Y1     X2    Y2
1     2      2     1

因此,第一个表中仅交换值的行将集成到第二个表中的一行中,并删除第一个表中的额外行。

2 个答案:

答案 0 :(得分:0)

也许下面R基中的代码可以工作

dfout <- `names<-`(cbind(r <- subset(df,df$Y>=df$X),rev(r)),
          c("X1","Y1","X2","Y2"))

如此

> dfout
  X1 Y1 X2 Y2
1  1  1  1  1
2  1  2  2  1
3  1  3  3  1
5  2  2  2  2
6  2  3  3  2
9  3  3  3  3

数据

df <- structure(list(X = c(1, 1, 1, 2, 2, 2, 3, 3, 3), Y = c(1, 2, 
3, 1, 2, 3, 1, 2, 3)), class = "data.frame", row.names = c(NA, 
-9L))

答案 1 :(得分:-1)

library(tidyverse)   
df <- tibble(x1 = 1, 1, 1, 2, 2, 2, 3, 3, 3,
            y1 = 1, 2, 3, 1, 2, 3, 1, 2, 3)
df <- df %>% mutate(x2 = y1, y2 = x1) %>% distinct()

我认为这可以解决问题。