【问题标题】:doing operations on multiple columns of data frame at once一次对多列数据框进行操作
【发布时间】:2019-11-05 23:50:55
【问题描述】:

假设我有一个数据框列表,我想同时对第 1,2 和 4 列进行一些操作,同时对第 3,5 和 6 列进行一些其他操作。

假设我想将第 1,2,4 列乘以 2,将第 3,5 和 6 列乘以 3。

使用 lapply 我可以一次执行以下操作之一,但不能同时执行两个操作:

A<- apply(list, function(x) {2*X[,c(1,2,4)] 3*X[,c(3,5,6)]}) 

这会给出错误消息,例如无法识别的数字常量。我怎样才能同时完成所有这些。这是因为如果我执行其中之一,我将返回 1、2、4 之类的列。

【问题讨论】:

    标签: r list dataframe apply lapply


    【解决方案1】:

    我们可以使用cbind 在乘以它们的常数后组合两个子集。

    lapply(list_df, function(df) cbind(df[c(1, 2, 4)] * 2, df[c(3, 5, 6)] * 3))
    
    #[1]]
    #  a  b  d  c  e  f
    #1 2  8 20 21 15 18
    #2 4 10 22 24 18 21
    #3 6 12 24 27 21 24
    
    #[[2]]
    #  a  b  d  c  e  f
    #1 2  8 20 21 15 18
    #2 4 10 22 24 18 21
    #3 6 12 24 27 21 24
    

    数据

    df <- data.frame(a = 1:3, b = 4:6, c = 7:9, d = 10:12, e = 5:7, f = 6:8)
    list_df <- list(df, df)
    

    【讨论】:

      【解决方案2】:

      为什么不让事情变得简单并保持列顺序呢?下面假设数据框只有6列,都需要相乘。

      l <- list(df,df)
      lapply(l, function(x) x*c(2,2,3,2,3,3))
      

      输出

      [[1]]
        X1 X2 X3 X4 X5 X6
         2  4  9  8 15 18
      
      [[2]]
        X1 X2 X3 X4 X5 X6
        2  4  9  8 15 18
      

      数据

      df <- data.frame(1,2,3,4,5,6)
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-10-26
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-09-22
        • 1970-01-01
        • 2023-04-06
        • 2020-09-26
        相关资源
        最近更新 更多