选择R表中的非连续列

时间:2011-11-17 21:01:04

标签: r

假设我有一些表,T。假设T有5列。我理解如何选择任何连续的列子集并将它们存储为新表。为此我会在逗号右侧使用括号和冒号:

newT <- T[,2:4]   # creates newT from columns 2 through 4 in T

但是如何选择非连续列进行子集化?假设我想选择第1列和第3列?我该怎么做呢?我可能想要做的另一种选择,并且不确定如何,从T中选择随机列。

4 个答案:

答案 0 :(得分:33)

您只需先生成所需的索引即可。 c函数允许您连接值。值可以是列索引或列名称(但不能混合)。

df <- data.frame(matrix(runif(100), 10))
cols <- c(1, 4:8, 10)
df[,cols]

您还可以通过指定否定索引来选择删除的列索引:

df[, -c(3, 5)] # all but the third and fifth columns

答案 1 :(得分:4)

如果我理解你的问题,你应该尝试类似以下内容:

df1 = data.frame(state=c("KS","CO","CA","FL","CA"), value=c(1,2,3,7,9))
df1

df1[c(c(1,3),4:5),]
df1[c(1,3,4:5),]

答案 2 :(得分:2)

对于随机列,请查看?sample

df <- data.frame(matrix(runif(25), 5))
df
#         X1        X2         X3         X4        X5
#1 0.7973941 0.6142358 0.07211461 0.01478683 0.6623704
#2 0.8992845 0.8347466 0.54495115 0.52242817 0.4944838
#3 0.8695551 0.9228987 0.00838420 0.58049324 0.9256282
#4 0.1559048 0.7116077 0.08964883 0.06799828 0.3752833
#5 0.2179599 0.4533054 0.60817319 0.62235228 0.8357441

df[ ,sample(names(df), 3)]
#         X5         X3        X2
#1 0.6623704 0.07211461 0.6142358
#2 0.4944838 0.54495115 0.8347466
#3 0.9256282 0.00838420 0.9228987
#4 0.3752833 0.08964883 0.7116077
#5 0.8357441 0.60817319 0.4533054

答案 3 :(得分:0)

您也可以使用逻辑值。例如。 df[c(TRUE,FALSE,TRUE)]选择第一和第三列。逻辑向量必须具有一个或多个等于数据帧中列数的元素,否则它的元素将被复制直到列数。