我正在嘗試制作一個計數資料框。我的起始資料框如下所示:
sample bike
1: 1 gazelle
2: 1 batavus
3: 2 cortina
4: 2 Cube
5: 3 Giant
我需要的是如下:
sample gazelle batavus cortina Cube Giant
1: 1 1 1 0 0 0
2: 2 0 0 1 1 0
3: 3 0 0 0 0 1
因此,如果變數存在于樣本中,則為 1,否則為 0。
我想:
df %>% group_by(sample, bike) %>%
summarize(count = n(), .group = "drop" %>%
pivot_wider(names_from = "bike", values_from = "count", values_fill = 0)
但這并沒有奏效。
uj5u.com熱心網友回復:
library(dplyr)
library(tidyr)
pivot_wider(
df,
names_from = bike, values_from = bike, values_fn = length, values_fill = 0L
)
# # A tibble: 3 × 6
# sample gazelle batavus cortina cube giant
# <int> <int> <int> <int> <int> <int>
# 1 1 1 1 0 0 0
# 2 2 0 0 1 1 0
# 3 3 0 0 0 0 1
資料
df = data.frame(
sample = c(1L,1L,2L,2L,3L),
bike = c("gazelle", "batavus", "cortina", "cube", "giant")
)
uj5u.com熱心網友回復:
我們也可以簡單地使用table來達到類似的目的。IE
table(df)
輸出:
sample batavus cortina cube gazelle giant
1 1 0 0 1 0
2 0 1 1 0 0
3 0 0 0 0 1
uj5u.com熱心網友回復:
value預先創建一個列:
library(tidyr)
library(dplyr)
dat %>%
group_by(bike) %>%
mutate(value = n()) %>%
pivot_wider(names_from = bike, values_fill = 0)
# A tibble: 3 × 6
sample gazelle batavus cortina Cube Giant
<int> <dbl> <dbl> <dbl> <dbl> <dbl>
1 1 1 1 0 0 0
2 2 0 0 1 1 0
3 3 0 0 0 0 1
uj5u.com熱心網友回復:
如果你group在summarize()陳述句中省略了,你的代碼就可以作業。
library(tidyverse)
df1 %>% group_by(sample,bike) %>% summarize(count=n()) %>% pivot_wider(names_from="bike", values_from="count", values_fill=0)
`summarise()` has grouped output by 'sample'. You can override using the `.groups` argument.
# A tibble: 3 × 6
# Groups: sample [3]
sample batavus gazelle Cube cortina Giant
<dbl> <int> <int> <int> <int> <int>
1 1 1 1 0 0 0
2 2 0 0 1 1 0
3 3 0 0 0 0 1
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/529426.html
標籤:r
上一篇:根據其他兩列中的值創建子分組列
