消除数据帧中递增的顺序行

时间:2014-08-19 03:25:55

标签: r

消除数据框中增加的订单行

x<-c(4,5,6,23,5,6,7,8,0,3)
y<-c(2,4,5,6,23,5,6,7,8,0)
z<-c(1,2,4,5,6,23,5,6,7,8)

df<-data.frame(x,y,z)

  df
    x  y  z
1   4  2  1
2   5  4  2
3   6  5  4
4  23  6  5
5   5 23  6
6   6  5 23
7   7  6  5
8   8  7  6
9   0  8  7
10  3  0  8

我想通过指示逐列逐行删除每列的行来消除df中的数字23(不是通过匹配值23,而是通过其初始x位置)。

df
    x  y  z
1   4  2  1
2   5  4  2
3   6  5  4
4   5  6  5
5   6  5  6
6   7  6  5
7   8  7  6
8   0  8  7
9   3  0  8

谢谢

2 个答案:

答案 0 :(得分:3)

您可以遍历列并从每个列中删除元素,然后重新组合为数据框:

result <- as.data.frame(lapply(1:ncol(df), function(x) df[-(x+3),x]))
names(result) <- names(df)
result
##   x y z
## 1 4 2 1
## 2 5 4 2
## 3 6 5 4
## 4 5 6 5
## 5 6 5 6
## 6 7 6 5
## 7 8 7 6
## 8 0 8 7
## 9 3 0 8

df[-(x+3),x]是按位置删除值的列。要从N列中的行x开始,您可以使用df[-(x+N-1),x]

答案 1 :(得分:1)

您也可以尝试:

  n <- 4
  df1 <- df[-n,]
  df1[] <- unlist(df,use.names=FALSE)[-seq(n, prod(dim(df)), by=nrow(df)+1)]
   df1
   #   x y z
   #1  4 2 1
   #2  5 4 2
   #3  6 5 4
   #5  5 6 5
   #6  6 5 6
   #7  7 6 5
   #8  8 7 6
   #9  0 8 7
   #10 3 0 8