【问题标题】:loop over columns with semi like columnnames循环使用半类似列名的列
【发布时间】:2011-08-23 07:57:24
【问题描述】:

我有以下变量和数据框

welltypes <- c("LC","HC")
qccast <- data.frame(
  LC_mean=1:10,
  HC_mean=10:1,
  BC_mean=rep(0,10)
)

现在我只想查看我选择的井型(在本例中为 LC 和 HC,但也可能是不同的。)

for(i in 1:length(welltypes)){
qccast$welltypes[i]_mean
}

这行不通,我知道。 但是我如何遍历这些列?

而且它必须以可变方式发生,因为井型的大小未知。

【问题讨论】:

    标签: r for-loop dataframe


    【解决方案1】:

    $ 的第二个参数需要是第一个参数的列名。我还没有运行代码,但我希望welltypes[i]_mean 是一个语法错误。 $[[ 类似,因此您可以使用paste 通过[[ 创建列名字符串和子集。

    例如:

    qccast[[paste(welltypes[i],"_mean",sep="")]]
    

    根据您的代码的其余部分,您也许可以执行类似的操作。

    for(i in paste(welltypes,"_mean",sep="")){
      qccast[[i]]
    }
    

    【讨论】:

    • 还请注意,您可以只循环遍历井类型:for(i in welltypes) qccast[[paste(i,"mean",sep="_")]]。如果您愿意,您可以使用单个 [] 获得完整的数据框:qccast[paste(welltypes,"mean",sep="_")]
    • 不,很高兴知道,但我需要将它们放在单独的 data.frames 中
    【解决方案2】:

    这是另一种策略:

    qccast[ sapply(welltypes, grep, names(qccast)) ]
       LC_mean HC_mean
    1        1      10
    2        2       9
    3        3       8
    4        4       7
    5        5       6
    6        6       5
    7        7       4
    8        8       3
    9        9       2
    10      10       1
    

    【讨论】:

      【解决方案3】:

      给定welltypes的另一种访问方式

      qccast[,paste(welltypes, '_mean', sep = "")]
      

      【讨论】:

      • 我个人认为这是从data.frame 中提取列的最差方法。更好地使用X[select] 来获得data.frameX[[select]],它将一列作为向量。 X[,select] 给出向量或 data.frame 取决于 select 长度(除非你提供 drop=TRUE 参数)。
      • @Marek。好点子。从来没有想过基于select长度的返回类型差异@
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-18
      • 2021-05-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多