【问题标题】:R: fragment a listR:对列表进行分段
【发布时间】:2011-09-07 19:53:53
【问题描述】:

我有点厌倦了使用列表......以及我有限的 R 能力......我很长一段时间都无法解决这个问题......

我的包含多个数据框的列表如下所示:

set.seed(456)
sn1 = paste( "X", c(1:4), sep= "")
onelist <- list (df1 <- data.frame(sn = sn1, var1 = runif(4)),
         df2 <- data.frame(sn = sn1, var1 = runif(4)),
        df3 <- data.frame(sn = sn1,var1 = runif(4)))
[[1]]
  sn      var1
1 X1 0.3852362
2 X2 0.3729459
3 X3 0.2179086
4 X4 0.7551050

[[2]]
  sn      var1
1 X1 0.8216811
2 X2 0.5989182
3 X3 0.6510336
4 X4 0.8431172

[[3]]
  sn      var1
1 X1 0.4532381
2 X2 0.7167571
3 X3 0.2912222
4 X4 0.1798831

我想创建一个子集列表,其中仅存在第 2 行和第 3 行。

   srow <-  c(2:3) # just I have many rows in real data 
    newlist <- lapply(onelist, function(y) subset(y, row(y) == srow))

新列表为空......

> newlist
[[1]]
[1] sn   var1
<0 rows> (or 0-length row.names)

[[2]]
[1] sn   var1
<0 rows> (or 0-length row.names)

[[3]]
[1] sn   var1
<0 rows> (or 0-length row.names)

请帮忙....

【问题讨论】:

    标签: list r dataframe


    【解决方案1】:

    这样做可以吗? 请注意隐式解释为 NULL 并导致提取所有列的行后面的逗号:

    > lapply(onelist, "[", c(2,3),)
    [[1]]
      sn      var1
    2 X2 0.2105123
    3 X3 0.7329553
    
    [[2]]
      sn       var1
    2 X2 0.33195997
    3 X3 0.08243274
    
    [[3]]
      sn      var1
    2 X2 0.3852362
    3 X3 0.3729459
    

    您可以使用您的子集策略:

    lapply(onelist, function(y) subset(y, rownames(y) %in% srow ))
    

    请注意,很多时候人们在真正应该使用 %in% 时使用“==”

    ?match
    

    【讨论】:

      【解决方案2】:

      我不认为 row 函数会像您认为的那样做:

      返回一个整数矩阵,表示它们在类似矩阵的对象中的行号,或一个表示行标签的因子。

      查看它在您的列表中返回的内容

      > row(onelist[[1]])
           [,1] [,2]
      [1,]    1    1
      [2,]    2    2
      [3,]    3    3
      [4,]    4    4
      > row(onelist[[1]])==srow
            [,1]  [,2]
      [1,] FALSE FALSE
      [2,] FALSE FALSE
      [3,] FALSE FALSE
      [4,] FALSE FALSE
      

      你正在做 data.frames 的一个简单子集,所以你可以使用

      newlist <- lapply(onelist, function(y) y[srow,])
      

      这给了

      > newlist
      [[1]]
        sn      var1
      2 X2 0.2105123
      3 X3 0.7329553
      
      [[2]]
        sn       var1
      2 X2 0.33195997
      3 X3 0.08243274
      
      [[3]]
        sn      var1
      2 X2 0.3852362
      3 X3 0.3729459
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2013-09-17
        • 1970-01-01
        • 2015-12-18
        • 2021-08-31
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多