繁体   English   中英

多行数据到列

[英]Multi-Row Data to Columns

我想获取当前在行中的一些数据,并将其转换为列。 这里的想法是对dfx1每个值都有一行,并根据唯一的x1x2组合将x3的数据分为两列。

> 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

目前,我一直在尝试使此答案适合我的情况,但运气不佳。 任何帮助将非常感激。

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

您也可以使用内置的“重塑”功能。 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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM