请让我用一个例子来解释我想做什么。我有一个数据框,如:
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
因此,第一个表中仅交换值的行将集成到第二个表中的一行中,并删除第一个表中的额外行。
答案 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()
我认为这可以解决问题。