我有一个包含某些工作表名称的列表:
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
有关如何实现这一目标的任何想法?
答案 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;通过将matrix
和ncol
指定为dimnames
来list
,然后我们将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;使用regex
(sub('_sub', ..
)并将其作为分组变量用于split
&#39; sheet_names&#39;。结果将是list
,我们将其转换为matrix
(do.call(cbind,
)并将其与as.data.frame
包装在一起以转换回data.frame
。
答案 2 :(得分:1)
如果您真的想要使用每对值调用一个函数,可以使用tapply
。 INDEX
分组X
和FUN
中的元素与每组元素一起调用:
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"