多列数据到列

时间:2012-03-14 04:41:57

标签: r reshape

我想获取当前在行中的一些数据,并将其转换为列。这里的想法是为x1df的每个值设置一行,并根据唯一x3x1中的数据拆分为两列和x2组合。

> df
    x1 x2 x3
1    A  0  4
2    A  1  2
3    B  1  1
4    C  0  5
5    C  1  2
6    D  0  1
7    D  1  1
8    E  0  3

这可能涉及多步清理过程,但最终我想获得类似下表df_rev的内容。请注意,B0E1的缺失组合已替换为0值。

> df_rev
    x1 x3_0 x3_1
1    A    4    2
3    B    0    1
4    C    5    2
6    D    1    1
8    E    3    0

现在我一直试图让this answer符合我的情况,但没有太多运气。任何帮助将不胜感激。

2 个答案:

答案 0 :(得分:3)

df='
    No    x1 x2 x3
    1    A  0  4
    2    A  1  2
    3    B  1  1
    4    C  0  5
    5    C  1  2
    6    D  0  1
    7    D  1  1
    8    E  0  3'

    df=read.table(text=df,header=T)

    library(reshape)
    nf = cast(df, x1 ~ x2, value = .(x3))
    colnames(nf) = c('x1','x3_0','x3_1')
    nf[is.na(nf)] <- 0
nf

答案 1 :(得分:0)

您还可以使用内置的“重塑”功能。 sub表达式只是用.替换变量名中_的所有实例,如果你有很多“次”,这可能比重新输入所有新变量名更方便(在这里你只是有两个,但你可以轻松拥有更多):

df_rev = reshape(df, timevar="x2", idvar="x1", direction="wide")
names(df_rev) = sub("\\.", "_", names(df_rev))
df_rev[is.na(df_rev)] = 0
df_rev