r - 如何 reshape 数据框以生成两列值(R 编程)

标签 r dataframe reshape melt

我有一个如下所示的 data.frame:

  name1 feat   x  y perc.x perc.y
1   foo    z 100 10    0.1      1
2   bar    w 200 20    0.2      2
3   qux    x 300 30    0.3      3
4   qux    y 400 40    0.4      4
5   bar    v 500 50    0.5      5

它是用下面的代码生成的:

name1 <- c("foo","bar","qux","qux","bar")
 feat <- c("z","w","x","y","v")
 x <- c(100,200,300,400,500)
 y <- c(10,20,30,40,50)
 perc.x <- c(0.1,0.2,0.3,0.4,0.5)
 perc.y <- c(1,2,3,4,5)

 df <- data.frame(name1,feat,x,y,perc.x,perc.y)
 df

如何创建这样的融化数据:

    name1 feat variable value value2.perc
1    foo    z        x 100.0   0.1
2    bar    w        x 200.0   0.2
3    qux    x        x 300.0   0.3
4    qux    y        x 400.0   0.4
5    bar    v        x 500.0   0.5
6    foo    z        y  10.0   1
7    bar    w        y  20.0   2
8    qux    x        y  30.0   3
9    qux    y        y  40.0   4
10   bar    v        y  50.0   5

我试过了但是失败了:

   library(reshape2)
    melt(df)

最佳答案

基于 R 的解决方案,使用 reshape :

 reshape(df,direction='long', varying=list(c(3, 4), c(5, 6)))
    name1 feat time   x perc.x id
1.1   foo    z    1 100    0.1  1
2.1   bar    w    1 200    0.2  2
3.1   qux    x    1 300    0.3  3
4.1   qux    y    1 400    0.4  4
5.1   bar    v    1 500    0.5  5
1.2   foo    z    2  10    1.0  1
2.2   bar    w    2  20    2.0  2
3.2   qux    x    2  30    3.0  3
4.2   qux    y    2  40    4.0  4
5.2   bar    v    2  50    5.0  5

也许你应该工作一点时间变量。

编辑更好,感谢@mnel 精彩评论:

reshape(df,direction='long', varying=list(c(3, 4), c(5, 6)),
        ,v.names = c('value','perc'), times = c('x','y'))

    name1 feat time value perc id
1.x   foo    z    x   100  0.1  1
2.x   bar    w    x   200  0.2  2
3.x   qux    x    x   300  0.3  3
4.x   qux    y    x   400  0.4  4
5.x   bar    v    x   500  0.5  5
1.y   foo    z    y    10  1.0  1
2.y   bar    w    y    20  2.0  2
3.y   qux    x    y    30  3.0  3
4.y   qux    y    y    40  4.0  4
5.y   bar    v    y    50  5.0  5

关于r - 如何 reshape 数据框以生成两列值(R 编程),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17310244/

相关文章:

python - 为什么 date_range 给出的结果与 DataFrame Pandas 日期的索引 [] 不同?

python - 获取数据框中值的组合并实现一个函数

python - pandas 插值函数的参数 'index' 和 'values' 有什么区别?

r - 如何在 R 中的 data.frame 中聚合数据

r - 将每日和定期数据合并到一个数据框中

reshape 数据框以将因子转换为 R 中的列

python - 关于特定数组及其最终形状的 Numpy 奇特索引问题?

python - 在没有多重索引的情况下分割 Pandas 系列

r - 在 R 中,为什么 sum 与其他方法(例如 cumsum)相比如此慢?

r - 计算数据框中列的平均值的快捷方式