我想堆疊我的資料集,以便所有觀察結果都與除自身之外的所有其他觀察結果相關。假設我有以下資料集:
df <- data.frame(id = c("a", "b", "c", "d" ),
x1 = c(1,2,3,4))
df
id x1
1 a 1
2 b 2
3 c 3
4 d 4
我希望觀察 a 與 b、c 和 d 相關。對于其他所有觀察結果也是如此。結果應如下所示:
id x1 id2 x2
1 a 1 b 2
2 a 1 c 3
3 a 1 d 4
4 b 2 a 1
5 b 2 c 3
6 b 2 d 4
7 c 3 a 1
8 c 3 b 2
9 c 3 d 4
10 d 4 a 1
11 d 4 b 2
12 d 4 c 3
所以觀察 a 與 b,c,d 有關。觀察 b 與 a、c、d 相關。等等。有任何想法嗎?
uj5u.com熱心網友回復:
另外的選擇:
library(dplyr)
left_join(df, df, by = character()) %>%
filter(id.x != id.y)
或者
output <- merge(df, df, by = NULL)
output = output[output$id.x != output$id.y,]
感謝@ritchie-sacramento,我以前不知道該by = NULL選項merge,感謝@zephrylby = character()為 dplyr 加入選項。
uj5u.com熱心網友回復:
tidyr::expand_grid()接受資料幀,然后可以對其進行過濾以洗掉共享 id 的行:
library(tidyr)
library(dplyr)
expand_grid(df, df, .name_repair = make.unique) %>%
filter(id != id.1)
# A tibble: 12 × 4
id x1 id.1 x1.1
<chr> <dbl> <chr> <dbl>
1 a 1 b 2
2 a 1 c 3
3 a 1 d 4
4 b 2 a 1
5 b 2 c 3
6 b 2 d 4
7 c 3 a 1
8 c 3 b 2
9 c 3 d 4
10 d 4 a 1
11 d 4 b 2
12 d 4 c 3
uj5u.com熱心網友回復:
您可以使用combn()獲取行索引的所有組合,然后從這些組合您的資料框:
rws <- cbind(combn(nrow(df), 2), combn(nrow(df), 2, rev))
df2 <- cbind(df[rws[1, ], ], df[rws[2, ], ])
# clean up row and column names
rownames(df2) <- 1:nrow(df2)
colnames(df2) <- c("id", "x1", "id2", "x2")
df2
id x1 id2 x2
1 a 1 b 2
2 a 1 c 3
3 a 1 d 4
4 b 2 c 3
5 b 2 d 4
6 c 3 d 4
7 b 2 a 1
8 c 3 a 1
9 d 4 a 1
10 c 3 b 2
11 d 4 b 2
12 d 4 c 3
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/529054.html
下一篇:使用空間資料匯入CSV
