在数据框中转置 n 行,在 R 中有许多列
transpose n rows in dataframe with many columns in R
我有一个包含 6 个变量和 973 个观测值的数据框。第五列有四个唯一字符条目,最后一列有相应的数值。以下是数据示例:
year month gear area code value
2018 1 YH 678 GEF 0.8
2018 1 YH 678 KID 1.7
2018 2 YH 678 KID 1.2
2017 3 JK 678 LKA 1.4
2017 3 JK 678 DJN 0.9
2017 3 JK 679 DJN 0.5
2018 7 JK 689 GEF 0.3
我想把第五列的代码做成headers列,每一行都有对应的值,重新排列如下:
year month gear area GEF KID LKA DJN
2018 1 YH 678 0.8 1.7
2018 2 YH 678 1.2
2017 3 JK 678 1.4 0.9
2017 3 JK 679 0.5
2018 7 JK 680 0.3
我一直没能找到一种方法来执行此操作,请保留前四列的格式。
df <- read.table(text = "
year month gear area code value
2018 1 YH 678 GEF 0.8
2018 1 YH 678 KID 1.7
2018 2 YH 678 KID 1.2
2017 3 JK 678 LKA 1.4
2017 3 JK 678 DJN 0.9
2017 3 JK 679 DJN 0.5
2018 7 JK 689 GEF 0.3", header = T)
reshape(df, v.names = "value", timevar = "code", direction = "wide", idvar = c("year", "month", "gear", "area"))
year month gear area value.GEF value.KID value.LKA value.DJN
1 2018 1 YH 678 0.8 1.7 NA NA
3 2018 2 YH 678 NA 1.2 NA NA
4 2017 3 JK 678 NA NA 1.4 0.9
6 2017 3 JK 679 NA NA NA 0.5
7 2018 7 JK 689 0.3 NA NA NA
您需要从 "long" 到 "wide" 格式:
library(tidyverse)
df_wide <- spread(df, code, value)
我有一个包含 6 个变量和 973 个观测值的数据框。第五列有四个唯一字符条目,最后一列有相应的数值。以下是数据示例:
year month gear area code value
2018 1 YH 678 GEF 0.8
2018 1 YH 678 KID 1.7
2018 2 YH 678 KID 1.2
2017 3 JK 678 LKA 1.4
2017 3 JK 678 DJN 0.9
2017 3 JK 679 DJN 0.5
2018 7 JK 689 GEF 0.3
我想把第五列的代码做成headers列,每一行都有对应的值,重新排列如下:
year month gear area GEF KID LKA DJN
2018 1 YH 678 0.8 1.7
2018 2 YH 678 1.2
2017 3 JK 678 1.4 0.9
2017 3 JK 679 0.5
2018 7 JK 680 0.3
我一直没能找到一种方法来执行此操作,请保留前四列的格式。
df <- read.table(text = "
year month gear area code value
2018 1 YH 678 GEF 0.8
2018 1 YH 678 KID 1.7
2018 2 YH 678 KID 1.2
2017 3 JK 678 LKA 1.4
2017 3 JK 678 DJN 0.9
2017 3 JK 679 DJN 0.5
2018 7 JK 689 GEF 0.3", header = T)
reshape(df, v.names = "value", timevar = "code", direction = "wide", idvar = c("year", "month", "gear", "area"))
year month gear area value.GEF value.KID value.LKA value.DJN
1 2018 1 YH 678 0.8 1.7 NA NA
3 2018 2 YH 678 NA 1.2 NA NA
4 2017 3 JK 678 NA NA 1.4 0.9
6 2017 3 JK 679 NA NA NA 0.5
7 2018 7 JK 689 0.3 NA NA NA
您需要从 "long" 到 "wide" 格式:
library(tidyverse)
df_wide <- spread(df, code, value)