_a我正在尝试转换数据集。我想实现的是,如果Intensitat
= 1 - R创建一个新列 - 强度1a - 并写入damage_a
的值。如果Intensitat
= 2 - R会创建另一个新列 - 强度2a - 并写入damage_a
的值。最后,如果Intensitat = 3,则R会执行新列 - 强度3a - 并写入damage_a
的值。 (它总是写入对应于与强度指示符相同的行的damage_x的值)。从长数据表到宽数据表
然后我将运行相同的过程:从指示符变量创建3列 - 指标值的每列和每列中的值使用damage_b
。
最后一样,但使用damage_c
的值。
type <- sample(seq(from = 1, to = 5, by = 1), size = 50, replace = TRUE)
type
intensity <- sample(seq(from = 1, to = 3, by = 1), size = 50, replace = TRUE)
intensity
damage_a <- sample(seq(from = 1, to = 50, by = 1), size = 50, replace = TRUE)
damage_b <- sample(seq(from = 1, to = 200, by = 1), size = 50, replace = TRUE)
damage_c <- sample(seq(from = 1, to = 500, by = 1), size = 50, replace = TRUE)
dat <- data.frame(type, intensity, damage_a, damage_b, damage_c)
# want to evaluate if the difference in mean between different damages
dat1 <- subset(dat, select = c(type, intensity, damage_a))
dat2 <- subset(dat, select = c(type, intensity, damage_b))
dat3 <- subset(dat, select = c(type, intensity, damage_c))
对你来说这看起来像是一件非常容易的事,但我一直坚持了两天。我已经尝试过应用于tidyr函数,ifelse命令等,但从未获得我所需要的东西。任何意见/想法都非常受欢迎。谢谢。
编辑:
我设法改变格式,如果与这个小方便的功能表。
df.out <- unstack(dat, damage_a ~ intensity)
现在的问题是,我得到长度不同的列表。我如何将这些列表组合到ona数据框中?
也许'库(data.table); dcast(setDT(DAT),型+ ROWID(类型,强度)〜 paste0(“intensity_”,intensity),value.var = c('damage_a','damage_b','damage_c'))' – akrun
是的,但为什么在你的代码中有一个'type_f'变量?你能稍微解释一下这些命令的作用吗? – Danka
我发表了评论作为一些解释的解决方案 – akrun