-1

我有以下问题,我不知道在 R 中从哪里开始:我有两列具有相同的信息,但一列包含一些附加信息。我希望两列完全相同。这是一个例子:

1   1
1   1
2   1
2   2
3   2
3   2
4   2
4   3
5   3
5   3
    4
    4
    4
    5
    5
    5
    5
    5

因此,必须删除第二列中的一些数字,以便两列具有相同的长度并且在每一行中具有相同的数字。我想有可能构造一个循环并告诉 R 删除第二列中的数字,直到column1 = column2. 但我不知道从哪里开始。如果两行不匹配,R是否有可能自动读取两列并删除?

4

2 回答 2

3

从表面上看你的问题,这将只返回第 1 列 == 第 2 列的行和带有 NA 的行也被删除。如果这不是您期望的输出,请进一步澄清您的问题,最好使用可重现的示例。

> dat <- read.table(text = "1   1
+ 1   1
+ 2   1
+ 2   2
+ 3   2
+ 3   2
+ 4   2
+ 4   3
+ 5   3
+ 5   3
+ NA    4
+ NA    4
+ NA    4
+ NA    5
+ NA    5
+ NA    5
+ NA    5
+ NA    5", header = FALSE)


> dat[dat$V1 == dat$V2 & complete.cases(dat),]
  V1 V2
1  1  1
2  1  1
4  2  2
于 2012-05-24T14:31:33.607 回答
0

首先,让我们制作一些 R 对象来说明您的问题:

a <- c(1,1,2,2,3,3,4,4,5,5)
b <- c(1,1,1,2,2,2,3,3,3,4,4,4,5,5,5,5)

从问题来看,听起来您将它们放在同一个对象中:

c <- cbind(a,b)
  Warning message:
In cbind(a, b) :
  number of rows of result is not a multiple of vector length (arg 1)

但这实际上将第一个length(b) - length(a)元素添加a到末尾,使其与b.

您可以只填写 first 的缺失值a

 a2 <- append(a, rep(NA, 6) 

现在您可以将它们绑定在一起:

 c <- cbind(a2, b)

但现在听起来你想从 b 中删除与 a 不匹配的元素。您提出了一个 for 循环。但这会变得混乱,并且很快就会证明手头的任务定义不明确。while可能更合适,但同样,正如@user1407656 在评论中提到的那样,您可以通过将两列绑定a在一起来获得所需的结果:

 d <- cbind(a,a)
于 2012-05-24T14:33:20.533 回答