构建R data.frame

时间:2018-05-02 14:12:30

标签: r

我有一个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="")]

1 个答案:

答案 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