你好,我用这些特征的表工作:R表转换
2000 0.051568
2000 0.04805
2002 0.029792
2002 0.056141
2008 0.047285
2008 0.038989
,我需要将其转换为这样的事情:
2000 2002 2008
0.051568 0.029792 0.047285
0.04805 0.056141 0.038989
我将不胜感激,如果有人可以给我一个解决方案。
你好,我用这些特征的表工作:R表转换
2000 0.051568
2000 0.04805
2002 0.029792
2002 0.056141
2008 0.047285
2008 0.038989
,我需要将其转换为这样的事情:
2000 2002 2008
0.051568 0.029792 0.047285
0.04805 0.056141 0.038989
我将不胜感激,如果有人可以给我一个解决方案。
可能我理解这个错误,但是?reshape
你在找什么? 从例子:
summary(Indometh)
wide <- reshape(Indometh, v.names="conc", idvar="Subject", timevar="time", direction="wide")
wide
下面是一个相对简单的解决方案:
# CREATE ORIGINAL DATA.FRAME
df <- read.table(text="2000 0.051568
2000 0.04805
2002 0.029792
2002 0.056141
2008 0.047285
2008 0.038989", header=FALSE)
names(df) <- c("year", "value")
# MODIFY ITS LAYOUT
df2 <- as.data.frame(split(df$value, df$year))
df2
# X2000 X2002 X2008
# 1 0.051568 0.029792 0.047285
# 2 0.048050 0.056141 0.038989
我猜你是新的R,所以我要猜你的意思,给你多一些正确的术语。如果我猜错了,那么至少这可能会帮助你澄清这个问题。
在R中,表格是由交叉列表产生的矩阵的特例。我认为你有(或者想要)开始是data.frame
。 A data.frame
是一组可能具有不同类型的列,但长度相同;在这个意义上它是“矩形”的。通常,data.frame
的列(即每行)中的相同位置中的元素彼此相关。 data.frame
的列具有名称,行也是如此。
long <- data.frame(year=c(2000,2000,2002,2002,2008,2008),
val=c(0.051568, 0.04805, 0.029792,
0.056141, 0.047285, 0.038989))
打印了模样
> long
year val
1 2000 0.051568
2 2000 0.048050
3 2002 0.029792
4 2002 0.056141
5 2008 0.047285
6 2008 0.038989
通过自身的时候,这是不够的,因为你需要的输出,你需要指定,比如说哪个值,2000是第一行并在第二个(如果有更多的话)等等。在你的榜样,这只是他们的顺序。
long$targetrow = 1:2
这使得long
现在看起来像
> long
year val targetrow
1 2000 0.051568 1
2 2000 0.048050 2
3 2002 0.029792 1
4 2002 0.056141 2
5 2008 0.047285 1
6 2008 0.038989 2
现在你可以使用它reshape
。
reshape(long, idvar="targetrow", timevar="year", direction="wide")
这给
> reshape(long, idvar="targetrow", timevar="year", direction="wide")
targetrow val.2000 val.2002 val.2008
1 1 0.051568 0.029792 0.047285
2 2 0.048050 0.056141 0.038989
更复杂的转换也是可以使用reshape2
包,但这应该让你开始。