【问题标题】:R: casting multiple columns accordingR:根据铸造多列
【发布时间】:2016-07-11 04:20:45
【问题描述】:

我有这个数据集(在命令行中运行它,看看它)

structure(list(Staz = c("Carmagnola", "Chieri", "Chivasso", "Ivrea", 
"Moncalieri", "Orbassano"), Year = c(2004, 2004, 2004, 2004, 
2004, 2004), Season = c("Autumn", "Autumn", "Autumn", "Autumn", 
"Autumn", "Autumn"), Avg_T = c(11.7361111111111, 11.7361111111111, 
11.7361111111111, 11.7361111111111, 11.7361111111111, 11.7361111111111
), Min_T = c(7.27222222222222, 7.27222222222222, 7.27222222222222, 
7.27222222222222, 7.27222222222222, 7.27222222222222), Max_T = c(16.6722222222222, 
16.6722222222222, 16.6722222222222, 16.6722222222222, 16.6722222222222, 
16.6722222222222), Moisture = c(69.6388888888889, 69.6388888888889, 
69.6388888888889, 69.6388888888889, 69.6388888888889, 69.6388888888889
), Rain = c(79.2, 79.2, 79.2, 79.2, 79.2, 79.2), Year_Bef = c(2004, 
2004, 2004, 2004, 2004, 2004), Year_Bef_Two = c(2004, 2004, 2004, 
2004, 2004, 2004)), .Names = c("Staz", "Year", "Season", "Avg_T", 
"Min_T", "Max_T", "Moisture", "Rain", "Year_Bef", "Year_Bef_Two"
), row.names = c(NA, 6L), class = "data.frame")

您可以看到有一个名为“Season”的变量,用于定义数据的季节。我想拆分每个季节的天气变量('Avg_T'、Min_T'、'Max_T'、'Moisture'、'Rain'),但将它们放在同一行。因此,我每年每个研究区域只有一行,包含有关季节性数据的信息。

我尝试使用“reshape”和“reshape2”包中的“cast”和“dcast”命令来做到这一点,但没有成功。

有人可以帮帮我吗?

谢谢,

雅各布

【问题讨论】:

  • 你能显示预期的输出吗?

标签: r casting reshape


【解决方案1】:

首先,假设您的数据位于df。我把rbind df 改成dfdf 后半段的季节改成夏天,这样我们就有超过1个赛季了:

df <- rbind(df, df)
df[7:12,]$Season = 'Summer'

然后我去掉df 中的最后两列(它们似乎什么也没做):

df = df[, -c(9,10)]

现在,我们可以使用 reshape 函数了:

r_df <- reshape(df, timevar = 'Season', idvar = c('Staz', 'Year'), direction = 'wide')

我认为这应该可以满足您的需求。

【讨论】:

    猜你喜欢
    • 2018-06-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-02-08
    • 2014-05-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多