我在R中为配方提供了长格式数据,其中每个成分按行列出:
house rec ingr
98 leche de soya Leche de soya
98 leche de soya pan
98 arroz arroz
98 arroz aceite
98 arroz agua
98 arroz cebolla
98 pollo pollo
98 pollo sal
98 pollo aceite
98 papas fritas papa
98 papas fritas aceite
98 carne de res carne de res
98 carne de res aceite
124 Platano platano
124 Platano queso
124 cafŽ cafŽ
124 cafŽ azucar
124 CafŽ agua
124 majadito arroz
124 majadito carne
我想要每个独特食谱名称和房屋ID的成分。理想情况下,我想要一个962列宽的数据框(成分数),如果成分是否存在,则为1或0,或者是交易表,但是我被卡住了。
答案 0 :(得分:2)
以下是使用spread()
:
library(tidyverse)
dat <- data_frame(
house.id = c(rep(98, 3), rep(124, 3)),
recipe = c(
'leche de soya',
'leche de soya',
'arroz',
'arroz',
'arroz',
'arroz'
),
ingredients = c(
'Leche de soya',
'pan',
'arroz',
'aceite',
'agua',
'cebolla'
),
values = rep(1, 6)
)
dat <- spread(dat, ingredients, values, fill = 0)
答案 1 :(得分:0)
使用dcast()
:
library(data.table)
dcast(setDT(DT), house + rec ~ ingr, length)
house rec Leche de soya aceite agua arroz azucar caf<U+008E> carne carne de res 1: 98 arroz 0 1 1 1 0 0 0 0 2: 98 carne de res 0 1 0 0 0 0 0 1 3: 98 leche de soya 1 0 0 0 0 0 0 0 4: 98 papas fritas 0 1 0 0 0 0 0 0 5: 98 pollo 0 1 0 0 0 0 0 0 6: 124 Caf<U+008E> 0 0 1 0 0 0 0 0 7: 124 Platano 0 0 0 0 0 0 0 0 8: 124 caf<U+008E> 0 0 0 0 1 1 0 0 9: 124 majadito 0 0 0 1 0 0 1 0 cebolla pan papa platano pollo queso sal 1: 1 0 0 0 0 0 0 2: 0 0 0 0 0 0 0 3: 0 1 0 0 0 0 0 4: 0 0 1 0 0 0 0 5: 0 0 0 0 1 0 1 6: 0 0 0 0 0 0 0 7: 0 0 0 1 0 1 0 8: 0 0 0 0 0 0 0 9: 0 0 0 0 0 0 0
请注意拼写错误的影响。
DT <- readr::read_fwf(
" hs rec ingr
98 leche de soya Leche de soya
98 leche de soya pan
98 arroz arroz
98 arroz aceite
98 arroz agua
98 arroz cebolla
98 pollo pollo
98 pollo sal
98 pollo aceite
98 papas fritas papa
98 papas fritas aceite
98 carne de res carne de res
98 carne de res aceite
124 Platano platano
124 Platano queso
124 cafŽ cafŽ
124 cafŽ azucar
124 CafŽ agua
124 majadito arroz
124 majadito carne",
skip = 1L,
col_positions = readr::fwf_positions(c(3, 6, 20), c(5, 19, NA), c("house", "rec", "ingr")))