按规则选择列并将它们堆叠在R中

时间:2016-08-14 01:31:17

标签: r dataframe

Area    RA  RI  WA  WI  NA  NI
3   3   1   4   2   2   1
2   2   1   3   1   2   1
3   2   1   3   2   2   1
2   2   1   3   1   1   1
2   2   1   3   2   1   1
2   2   1   2   1   2   1
2   3   1   2   1   2   1
3   1   1   2   2   1   1
2   2   1   1   1   2   1
2   2   1   2   1   2   1
3   1   1   3   1   1   1

我想保留第一列并将每两列堆叠为:

Area    columan 1   Column 2
3   3   1
2   2   1
3   2   1
2   2   1
2   2   1
2   2   1
2   3   1
3   1   1
2   2   1
2   2   1
3   1   1
3   4   2
2   3   1
3   3   2
2   3   1
2   3   2
2   2   1
2   2   1
3   2   2
2   1   1
2   2   1
3   3   1
3   2   1
2   2   1
3   2   1
2   1   1
2   1   1
2   2   1
2   2   1
3   1   1
2   2   1
2   2   1
3   1   1

您的建议非常感谢!

1 个答案:

答案 0 :(得分:1)

我们使用回收逻辑索引(c(TRUE, FALSE)获取交替列,然后在没有第一列(df1[-1]),unlist的情况下对数据集进行子集化,并使用第一列对其进行cbind。

d1 <- data.frame(Area = df1[,1], column1 = unlist(df1[-1][ c(TRUE, FALSE)]), 
           column2 = unlist(df1[-1][c(FALSE, TRUE)]))
row.names(d1) <- NULL
head(d1)
#  Area column1 column2
#1    3       3       1
#2    2       2       1
#3    3       2       1
#4    2       2       1
#5    2       2       1
#6    2       2       1
tail(d1)
#   Area column1 column2
#28    2       2       1
#29    2       2       1
#30    3       1       1
#31    2       2       1
#32    2       2       1
#33    3       1       1