我有兩個長度不等的向量。我們稱它們為 group1 和 group2。
group1 <- c(1,2,3)
group2 <- c(6,7,8,9,10)
我想創建一個資料框,如:
| 鑰匙 | 價值 |
|---|---|
| 第一組 | 1 |
| 組2 | 6 |
| 組2 | 7 |
| 第一組 | 2 |
...很快
如果向量的長度相同,我知道該怎么做:只需創建一個小標題然后收集它。但是在這種情況下該怎么辦?
uj5u.com熱心網友回復:
你可以試試
group1 <- 1:3
group2 <- 6:10
n <- length(group2) - length(group1)
group1 <- c(group1, rep(NA, n))
tibble(group1,group2) %>%
rownames_to_column("idx") %>%
gather(group1,group2, key = 'key', value = 'value') %>%
mutate(idx = as.numeric(idx)) %>%
mutate(idx = ifelse(key == 'group1', floor(idx/2), floor((idx-1)/2))) %>%
arrange(idx, key) %>%
na.omit %>% select(-idx)
key value
<chr> <int>
1 group1 1
2 group2 6
3 group2 7
4 group1 2
5 group1 3
6 group2 8
7 group2 9
8 group2 10
uj5u.com熱心網友回復:
我假設您的問題中的行順序沒有意義。這是一種通用的方法。
vals1 = c(1, 2, 3)
vals2 = c(6, 7, 8, 9, 10)
list(group1 = vals1, group2 = vals2) %>%
imap(~ tibble(key = .y, value = .x)) %>%
reduce(bind_rows)
# A tibble: 8 x 2
key value
<chr> <dbl>
1 group1 1
2 group1 2
3 group1 3
4 group2 6
5 group2 7
6 group2 8
7 group2 9
8 group2 10
策略是為每個向量創建一個單獨的表,然后系結它們的行。我創建了一個命名串列,以便我可以將名稱傳遞給以imap()生成key列。創建每個單獨的 tibble 后,我用bind_rows().
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/383788.html
下一篇:根據列中是否存在特定子字串創建列
