[英]R: Break a data.frame according to value of column with dplyr
我有這個data.frame
MWE <- data.frame(x = c("a", "a", "a", "b", "b", "b"), y = c(1,2,3,4,5,6))
我想要得到的是這個data.frame
data.frame(a = c(1,2,3), b = c(4,5,6))
實際上,我最初想要的是對 2 個向量a
和b
sum
(好吧,實際上我有更多向量,但只有 2 個更容易解釋),所以這就是我考慮這種轉換的原因。 然后我可以做一個rowSums
或類似的東西。
我嘗試使用pivot_wider
的tidyr
,但出現錯誤。
知道如何使用dplyr
或tidyr
做到這一點嗎?
繼續@Mr.Flick 在tidyverse
中的嘗試,您可以創建一個 id 列並在該 id 列上分組計算總和,如
library(dplyr)
MWE %>%
group_by(x) %>%
mutate(row = row_number()) %>%
group_by(row) %>%
mutate(total_sum = sum(y)) %>%
tidyr::pivot_wider(names_from = x, values_from = y) %>%
ungroup() %>%
select(-row)
# A tibble: 3 x 3
# total_sum a b
# <dbl> <dbl> <dbl>
#1 5 1 4
#2 7 2 5
#3 9 3 6
我們可以使用來自base R
unstack
unstack
unstack(MWE, y ~ x)
# a b
#1 1 4
#2 2 5
#3 3 6
或者使用來自tidyr
的rowid
和來自data.table
的pivot_wider
library(dplyr)
library(data.table)
library(tidyr)
MWE %>%
mutate(rn = rowid(x)) %>%
pivot_wider(names_from = x, values_from = y) %>%
select(-rn)
# A tibble: 3 x 2
# a b
# <dbl> <dbl>
#1 1 4
#2 2 5
#3 3 6
使用基礎 R:
data.frame(with(MWE, split(y, x)))
a b
1 1 4
2 2 5
3 3 6
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.