我有一个data.frame
,其列名如此
> names(df)
[1] "v1_1_a" "v1_1_b" "v1_2_a"
这只是名称方案的一个例子。该命名方案有更多列。我想构建列名(仍然是现有列)并对它们执行操作,如下所示:
# pseudo code! python and R mixed
for minor in [1, 2, 3, 4, 5]:
for letter in ['a', 'b', 'c', 'd']:
col = 'v1_{}_{}'.format(minor, letter)
df[col] <- df[col] * 10
我可以构建这样的变量名吗?
试图例如:df[cat("v1_1_", "b", sep="")]
答案 0 :(得分:1)
注意*这肯定不是循环数据帧的最佳方式,如下面的评论所述。
您可以将变量粘贴在一起并直接调用列。 您在R中的伪代码:
for(minor in c(1, 2, 3, 4, 5))
for(letter in c('a', 'b', 'c', 'd'))
df[,paste0('v1_',minor,'_',letter)] <- df[,paste0('v1_',minor,'_',letter)] *10
这不适用于您的数据框,因为您没有所有组合。如果您不确定组合是否存在,您可以在进行计算之前检查它。
for(minor in c(1, 2, 3, 4, 5))
for(letter in c('a', 'b', 'c', 'd'))
if(paste0('v1_',minor,'_',letter) %in% colnames(df))
df[,paste0('v1_',minor,'_',letter)] <- df[,paste0('v1_',minor,'_',letter)] *10