簡體   English   中英

R:根據 dplyr 的列值打破 data.frame

[英]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 個向量ab sum (好吧,實際上我有更多向量,但只有 2 個更容易解釋),所以這就是我考慮這種轉換的原因。 然后我可以做一個rowSums或類似的東西。

我嘗試使用pivot_widertidyr ,但出現錯誤。

知道如何使用dplyrtidyr做到這一點嗎?

繼續@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

或者使用來自tidyrrowid和來自data.tablepivot_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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM