【问题标题】:convert a row of a data frame to a simple vector in R将数据框的一行转换为 R 中的简单向量
【发布时间】:2023-03-16 20:23:01
【问题描述】:

我有一个巨大的数据框,我只从中选择几行。然后我根据条件删除一些列。假设我选择了第 4460 行,如下所示:

        V1870 V107 V1315 V1867 V1544 V1207 V1252 V1765 V342 V429 V1826 V865 V1374
4460     0    0     3     0     5     0     2     0    4    0     0    0     0

问题是我需要将此行转换为一个简单的向量(这意味着我应该去掉所有列/行名称),以便我可以将它传递给另一个函数。我希望能够得到以下结果:

    [1] 0 0 3 0 5 0 2 0 4 0 0 0 0

我尝试了as.listas.vector,但没有一个给出我期望的结果。有什么想法吗?

【问题讨论】:

    标签: r list matrix dataframe


    【解决方案1】:

    来自mtcars 数据的示例

    mydata<-mtcars
    k<-mydata[1,]
              mpg cyl disp  hp drat   wt  qsec vs am gear carb
    Mazda RX4  21   6  160 110  3.9 2.62 16.46  0  1    4    4
    names(k)<-NULL
    
    unlist(c(k))
     [1]  21.00   6.00 160.00 110.00   3.90   2.62  16.46   0.00   1.00   4.00   4.00
    

    根据@Ananda 更新:unlist(mydata[1, ], use.names = FALSE)

    【讨论】:

    • 我不太明白。为什么不只是unlist(mydata[1, ], use.names = FALSE)
    • 非常感谢,@A5C1D2H2I1M1N2O1R2T1 您的解决方案是无价的;当我找到您的解决方案时,我一直在搜索 1 小时
    【解决方案2】:

    我认为它已经是一个向量,只是每个元素中都有名称(继承自 data.frame)。

        #random df
        DF = data.frame(col1 = sample(1:10, 10), col2 = sample(1:10,10), col3 = sample(1:10, 10))
    
        DF[5,]
          col1 col2 col3
        5    3    7    5
    
        mode(DF[5,]) 
        [1] "list"
    
        mode(unlist(DF[5,]))
        [1] "numeric"
    
        names(DF[5,])
        [1] "col1" "col2" "col3"
    
        sum(DF[5,]) # computations are naturally done
        [1] 15
    

    不过,要去掉名字,你可以:

        unname(unlist(DF[5,]))
        [1] 3 7 5
    

    【讨论】:

    • unlist 有一个use.names 参数,当设置为FALSE 时,它的额外好处是比仅使用unlist很多
    【解决方案3】:

    尝试使用行索引。

    e.q.

    list <- yourdataframe[4460, ]
    

    【讨论】:

      猜你喜欢
      • 2013-01-07
      • 1970-01-01
      • 1970-01-01
      • 2020-01-01
      • 1970-01-01
      • 2021-01-18
      • 1970-01-01
      • 2011-02-02
      • 2011-06-21
      相关资源
      最近更新 更多