我的R数据框中有一些数据,如下所示:
CharDate loc t_0h t_1h t_2h t_3h t_4h t_5h t_6h
xyz_20110101 A 2 20.00000 5 12.00000 13.00000 25.00000 2.00000
xyz_20110101 B 3 26.66667 7 14.33333 15.33333 28.33333 14.66667
xyz_20110102 A 4 33.33333 9 16.66667 17.66667 31.66667 27.33333
xyz_20110102 B 5 40.00000 11 19.00000 20.00000 35.00000 40.00000
前两列为字符格式,其余为数字。t_0h
..列表示特定小时的值。
我想重新格式化上面的数据,如下所示:日期、小时(单独列,0 - 6)、A和B的每小时值(作为单独的列)等等(下一个日期..)。
CharData Hour t_A t_B
xyz_20110101 0 2 3
xyz_20110101 1 20 26.6
xyz_20110101 2 5 7
xyz_20110101 3 12 14.3
xyz_20110101 4 13 15.3
xyz_20110101 5 25 28.3
xyz_20110101 6 2 14.6
xyz_20110102 0 4 5
xyz_20110102 1 33.3 40
xyz_20110102 2 9 11
xyz_20110102 3 16.6 19
xyz_20110102 4 17.6 20
xyz_20110102 5 31.6 35
xyz_20110102 6 27.3 40
我尝试了以下方法:
# A simple transpose
df2 <- data.frame(t(df[-c(1,2)]))
# Melt via data.table
long <- melt(setDT(df), id.vars = c("CharDate"))
and pivot_longer() from tidyr package
但到目前为止还没有成功。这里有没有人能帮忙(或给予提示)来达到预期的输出?
以下是再现性的示例数据:
CharDate<- c("xyz_20110101", "xyz_20110101", "xyz_20110102", "xyz_20110102")
loc <- c("A", "B", "A", "B")
t_0h <- c(seq(2,5,length.out=4))
t_1h <- c(seq(20,40,length.out=4))
t_2h <- c(seq(5,11,length.out=4))
t_3h <- c(seq(12,19,length.out=4))
t_4h <- c(seq(13,20,length.out=4))
t_5h <- c(seq(25,35,length.out=4))
t_6h <- c(seq(2,40,length.out=4))
df <- (data.frame(CharDate,loc,t_0h,t_1h,t_2h,t_3h,t_4h,t_5h,t_6h))
df
1条答案
按热度按时间watbbzwu1#
我们可以使用
pivot_longer/pivot_wider