使用原始数据框中新列中的值重塑 R 数据框
Reshape R dataframe with values in new columns from the original dataframe
我有以下数据框“饮食”:
ID Food.group grams day weight
A 12 200 1 60
A 13 300 1 60
A 14 100 1 60
A 15 50 1 60
A 16 200 1 60
A 17 250 1 60
B 13 300 2 73
B 14 140 2 73
B 15 345 2 73
B 17 350 2 73
C 12 120 6 66
C 13 100 6 66
C 16 200 6 66
我需要创建一个新的数据框,将每个食物组作为一个新列,并将以克为单位的值作为它们的值,全部按 ID 组织。其他列的每个 ID 都有唯一值,可以成为一行。像这样:
ID 12 13 14 15 16 17 day weight
A 200 300 100 50 200 250 1 60
B N/A 300 140 345 N/A 350 2 73
C 120 100 N/A N/A 200 N/A 6 66
我尝试使用 Diet2 <- reshape(Diet, idvar="ID", timevar="Food.group", direction="wide")
但我明白了:
ID 12.grams 12.day 12.weight 13.grams 13.day 13.weight
A 200 1 60 300 1 60
B N/A N/A N/A 300 2 73
C 120 6 66 100 6 66
等等。如何获得正确的数据框形状?
您可以使用 {tidyr}
中更新的 pivot_wider()
。
library(dplyr)
library(tidyr)
diet %>%
pivot_wider(id_cols = c("ID","day","weight")
, names_from = "Food.group"
, values_from = "grams")
这会给你:
# A tibble: 3 x 9
ID day weight `12` `13` `14` `15` `16` `17`
<chr> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
1 A 1 60 200 300 100 50 200 250
2 B 2 73 NA 300 140 345 NA 350
3 C 6 66 120 100 NA NA 200 NA
我有以下数据框“饮食”:
ID Food.group grams day weight
A 12 200 1 60
A 13 300 1 60
A 14 100 1 60
A 15 50 1 60
A 16 200 1 60
A 17 250 1 60
B 13 300 2 73
B 14 140 2 73
B 15 345 2 73
B 17 350 2 73
C 12 120 6 66
C 13 100 6 66
C 16 200 6 66
我需要创建一个新的数据框,将每个食物组作为一个新列,并将以克为单位的值作为它们的值,全部按 ID 组织。其他列的每个 ID 都有唯一值,可以成为一行。像这样:
ID 12 13 14 15 16 17 day weight
A 200 300 100 50 200 250 1 60
B N/A 300 140 345 N/A 350 2 73
C 120 100 N/A N/A 200 N/A 6 66
我尝试使用 Diet2 <- reshape(Diet, idvar="ID", timevar="Food.group", direction="wide")
但我明白了:
ID 12.grams 12.day 12.weight 13.grams 13.day 13.weight
A 200 1 60 300 1 60
B N/A N/A N/A 300 2 73
C 120 6 66 100 6 66
等等。如何获得正确的数据框形状?
您可以使用 {tidyr}
中更新的 pivot_wider()
。
library(dplyr)
library(tidyr)
diet %>%
pivot_wider(id_cols = c("ID","day","weight")
, names_from = "Food.group"
, values_from = "grams")
这会给你:
# A tibble: 3 x 9
ID day weight `12` `13` `14` `15` `16` `17`
<chr> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
1 A 1 60 200 300 100 50 200 250
2 B 2 73 NA 300 140 345 NA 350
3 C 6 66 120 100 NA NA 200 NA