【问题标题】:R - how to make long rows by matching an element of original rowsR - 如何通过匹配原始行的元素来制作长行
【发布时间】:2013-11-28 18:12:30
【问题描述】:

我有一个数据框,测试,定义如下:

id <- c(100, 100, 101, 101, 102, 102)
v1 <- c(1,2,0,0,3,0)
v2 <- c(2,3,5,8,4,1)
test <- data.frame (id, v1, v2)

如何创建一个新的数据框 test2,其中只有三行,由 id 匹配。每行将具有以下列:id、v1.1、v2.1、v3.1、v1.2、v2.2、v3.2。换句话说,对于每个唯一 id,我将创建一个新行,它将共享此 id 的旧行组合在一起。我想知道怎么做。

此外,上述方法旨在找出两个观察值中哪个 id 都为 0。我想删除这些。例如,我将删除 id 为 101 的两个观察值,因为它们都有 0。我会使用 id 102 保留这两个观察结果,因为其中只有一个是 0。是否有另一种方法可以在不执行上述方法的情况下执行此操作?

非常感谢,感恩节快乐!

【问题讨论】:

  • 如果你有相同的 id ,一个 0 代表 v1 另一个 0 在 v2 ,你会删除这一行,还是保留它?
  • 我会保留那个。在您很好的回答之后,我现在可以做的是创建一个新变量,将其命名为 sum,并将 sum 定义为 v1.1 + v1.2。然后检查 sum == 0,如果是,删除它。

标签: r dataframe


【解决方案1】:

我认为您试图以宽格式重塑 data.frame。

使用aggregate

aggregate(.~id,test,FUN=I)
   id v1.1 v1.2 v2.1 v2.2
1 100    1    2    2    3
2 101    0    0    5    8
3 102    3    0    4    1

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-12-02
    • 2019-05-13
    • 2020-08-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-01-28
    相关资源
    最近更新 更多