从列表中筛选连续值

时间:2015-08-06 09:48:42

标签: r

我有一个包含某些工作表名称的列表:

   sheet_names <- c("Sheet_Amsterdam", "Sheet_Amsterdam_sub", "Sheet_Rotterdam", "Sheet_Rotterdam_sub")

现在我想编写一个for循环,我想在其中执行以下函数: -1st en 2nd element 第3和第4个元素

等...首先我想我应该过滤它们。所以结果应该是这样的:

        Name1               Name2
1     Sheet_Amsterdam     Sheet_Rotterdam
2 Sheet_Amsterdam_sub Sheet_Rotterdam_sub

有关如何实现这一目标的任何想法?

3 个答案:

答案 0 :(得分:3)

dim(sheet_names) <- c(2, 2)
colnames(sheet_names) <- paste0("Name", 1:2)

这会将您的矢量重新格式化为2x2矩阵。我之后不确定你想用它做什么。

答案 1 :(得分:2)

目前尚不清楚&#39;矢量&#39;需要转换为&#39; data.frame&#39;基于“向量”中元素的位置或基于其中的模式。 (此外,filter部分令人困惑。我没有找到所需输出中遗漏的任何元素。)如果是前者,我们可以转换&#39; sheet_names&#39;通过将matrixncol指定为dimnameslist,然后我们将data.frame包裹到as.data.frame

 as.data.frame(matrix(sheet_names, ncol=2, dimnames=list(NULL,
               paste0('Name', 1:2))))
 #                Name1               Name2
 #1     Sheet_Amsterdam     Sheet_Rotterdam
 #2 Sheet_Amsterdam_sub Sheet_Rotterdam_sub

如果您想对&#39; sheet_names&#39;进行分组。基于前缀部分

  r1 <- as.data.frame(do.call(cbind,split(sheet_names,
                           sub('_sub', '', sheet_names))))
  colnames(r1) <- paste0('Name', 1:2)
  r1
  #                Name1               Name2
  #1     Sheet_Amsterdam     Sheet_Rotterdam
  #2 Sheet_Amsterdam_sub Sheet_Rotterdam_sub

在这种情况下,我们将删除后缀&#39; _sub&#39;来自&#39; sheet_names&#39;使用regexsub('_sub', ..)并将其作为分组变量用于split&#39; sheet_names&#39;。结果将是list,我们将其转换为matrixdo.call(cbind,)并将其与as.data.frame包装在一起以转换回data.frame

答案 2 :(得分:1)

如果您真的想要使用每对值调用一个函数,可以使用tapplyINDEX分组XFUN中的元素与每组元素一起调用:

sheet_names <- c("Sheet_Amsterdam", "Sheet_Amsterdam_sub", "Sheet_Rotterdam", "Sheet_Rotterdam_sub")

tapply(X = sheet_names,
       INDEX = rep(1:2, each = 2),
       FUN = print)
# [1] "Sheet_Amsterdam"     "Sheet_Amsterdam_sub"
# [1] "Sheet_Rotterdam"     "Sheet_Rotterdam_sub"