我正在尝试将“水果”列转换为宽格式的单独列(“苹果”和“香蕉”)。
Gender AgeGroup EAT FRUITS
1 Female 30yr_39yr Yes Apple
2 Female 20yr_29yr Yes Apple
3 Female 70yr_80yr Yes Apple
4 Male 50yr_59yr Yes Banana
5 Female 40yr_49yr Yes Apple
6 Female 70yr_80yr Yes Apple
如何将 FRUITS 栏转换为:
Gender AgeGroup EAT Apple Banana
1 Female 30yr_39yr Yes TRUE FALSE
2 Female 20yr_29yr Yes TRUE FALSE
3 Female 70yr_80yr Yes TRUE FALSE
4 Male 50yr_59yr Yes FALSE TRUE
5 Female 40yr_49yr Yes TRUE FALSE
6 Female 70yr_80yr Yes TRUE FALSE
这是我使用的数据框:
data.frame(
Gender = c("Female", "Female", "Female", "Male", "Female", "Female"),
AgeGroup = c("30yr_39yr", "20yr_29yr", "70yr_80yr", "50yr_59yr", "40yr_49yr", "70yr_80yr"),
EAT = c("Yes", "Yes", "Yes", "Yes", "Yes", "Yes"),
FRUITS = c("Apple", "Apple", "Apple", "Banana", "Apple", "Apple")
)
您必须向数据集添加一个值列,并为每行添加一个具有唯一 ID 的列:
df <- data.frame(
Gender = c("Female", "Female", "Female", "Male", "Female", "Female"),
AgeGroup = c("30yr_39yr", "20yr_29yr", "70yr_80yr", "50yr_59yr", "40yr_49yr", "70yr_80yr"),
EAT = c("Yes", "Yes", "Yes", "Yes", "Yes", "Yes"),
FRUITS = c("Apple", "Apple", "Apple", "Banana", "Apple", "Apple")
)
library(tidyr)
library(dplyr, warn = FALSE)
df |>
mutate(
value = TRUE,
id = row_number()
) |>
pivot_wider(
names_from = FRUITS,
values_from = value, values_fill = FALSE
) |>
select(-id)
#> # A tibble: 6 × 5
#> Gender AgeGroup EAT Apple Banana
#> <chr> <chr> <chr> <lgl> <lgl>
#> 1 Female 30yr_39yr Yes TRUE FALSE
#> 2 Female 20yr_29yr Yes TRUE FALSE
#> 3 Female 70yr_80yr Yes TRUE FALSE
#> 4 Male 50yr_59yr Yes FALSE TRUE
#> 5 Female 40yr_49yr Yes TRUE FALSE
#> 6 Female 70yr_80yr Yes TRUE FALSE