如何从 R 中的唯一行创建变量
How to create variables from unique rows in R
这是我的数据集的样子:
| hhid | food_code | consumed |.....|
|----------|--------------|--------------|.....|
| 479 | 01.1.1.1.0.3 | 0.66666667 |.....|
| 479 | 01.1.1.2.1.3 | 0.00000000 |.....|
| 480 | 01.1.1.1.0.3 | 0.33333333 |.....|
| 480 | 01.1.1.2.1.3 | 0.26548932 |.....|
...
...
所以,我有很多 hhid
和 74 个独特的 food_code
。对于每个 hhid
,我想制作一个数据框如下:
| hhid | 01.1.1.1.0.3 | 01.1.1.2.1.3 |.....|
|----------|--------------|--------------|.....|
| 479 | 0.66666667 | 0.00000000 |.....|
| 480 | 0.33333333 | 0.26548932 |.....|
我尝试用 t()
函数进行转置,但它把一切都搞砸了。
我也试过filter
raw2<-raw%>%
select(hhid, food_code_str, fd_cspn_ph)%>%
filter(hhid==479)
您可以使用 tidyr
中的 pivot_wider
(在 tidyverse
中)。
library(tidyverse)
df %>%
pivot_wider(names_from = "food_code", values_from = "consumed")
输出
hhid `01.1.1.1.0.3` `01.1.1.2.1.3`
<int> <dbl> <dbl>
1 479 0.667 0
2 480 0.333 0.265
数据
df <- structure(list(hhid = c(479L, 479L, 480L, 480L, 481L), food_code = c("01.1.1.1.0.3",
"01.1.1.2.1.3", "01.1.1.1.0.3", "01.1.1.2.1.3", "01.1.1.2.1.4"
), consumed = c(0.66666667, 0, 0.33333333, 0.26548932, 0.26548932
)), class = "data.frame", row.names = c(NA, -5L))
这是我的数据集的样子:
| hhid | food_code | consumed |.....|
|----------|--------------|--------------|.....|
| 479 | 01.1.1.1.0.3 | 0.66666667 |.....|
| 479 | 01.1.1.2.1.3 | 0.00000000 |.....|
| 480 | 01.1.1.1.0.3 | 0.33333333 |.....|
| 480 | 01.1.1.2.1.3 | 0.26548932 |.....|
...
...
所以,我有很多 hhid
和 74 个独特的 food_code
。对于每个 hhid
,我想制作一个数据框如下:
| hhid | 01.1.1.1.0.3 | 01.1.1.2.1.3 |.....|
|----------|--------------|--------------|.....|
| 479 | 0.66666667 | 0.00000000 |.....|
| 480 | 0.33333333 | 0.26548932 |.....|
我尝试用 t()
函数进行转置,但它把一切都搞砸了。
我也试过filter
raw2<-raw%>%
select(hhid, food_code_str, fd_cspn_ph)%>%
filter(hhid==479)
您可以使用 tidyr
中的 pivot_wider
(在 tidyverse
中)。
library(tidyverse)
df %>%
pivot_wider(names_from = "food_code", values_from = "consumed")
输出
hhid `01.1.1.1.0.3` `01.1.1.2.1.3`
<int> <dbl> <dbl>
1 479 0.667 0
2 480 0.333 0.265
数据
df <- structure(list(hhid = c(479L, 479L, 480L, 480L, 481L), food_code = c("01.1.1.1.0.3",
"01.1.1.2.1.3", "01.1.1.1.0.3", "01.1.1.2.1.3", "01.1.1.2.1.4"
), consumed = c(0.66666667, 0, 0.33333333, 0.26548932, 0.26548932
)), class = "data.frame", row.names = c(NA, -5L))