【问题标题】:Apply function iteratively across a dataframe在数据框中迭代地应用函数
【发布时间】:2015-06-09 11:13:30
【问题描述】:

我有一个关于在 R 中跨数据集应用函数的两部分问题。

i) 首先,我有 2 个数据帧,我想迭代地组合和配对,这样像 cbind 函数之类的东西会将每个数据帧的第一列彼此相邻排列,然后是第二列和很快。在下面的示例中,我想要一个组合 df1 和 df2 的输出,其中列顺序为 eg1、eg4、eg2、eg5、eg3、eg6。

eg1 <- as.data.frame(matrix(sample(0:1000, 36*10, replace=TRUE), ncol=1))
eg2 <- as.data.frame(matrix(sample(0:500, 36*10, replace=TRUE), ncol=1))
eg3 <- as.data.frame(matrix(sample(0:750, 36*10, replace=TRUE), ncol=1))
df1 <- cbind(eg1,eg2,eg3)
eg4 <- as.data.frame(matrix(sample(0:200, 36*10, replace=TRUE), ncol=1))
eg5 <- as.data.frame(matrix(sample(0:100, 36*10, replace=TRUE), ncol=1))
eg6 <- as.data.frame(matrix(sample(0:350, 36*10, replace=TRUE), ncol=1))
df2 <- cbind(eg4,eg5,eg6)

我知道手动执行此操作的方法(如下),但是在组合更大的数据集时这并不理想,我想知道是否有更有效的方法来实现这一点?

df3 <- cbind(df1,df2)
df3 <- df3[,c(1,4,2,5,3,6)]

(ii) 在此之后,我想根据相应偶数列中的 7 个最高值在每个奇数列中输出 7 个值。例如,对于前两列...

df4 <- df3[,1:2]
High_7 <- tail(df4[order(df4[,2]),],7)#Highest 7 values in even column
High_7 <- High_7[,1] #Select odd column values

但是在整个数据集中使用它的示例,也许通过某种形式的应用函数会更有效。

【问题讨论】:

    标签: r dataframe tail cbind


    【解决方案1】:

    关于迭代组合两个数据帧的 cols 的第一个问题(请注意,这仅在两个数据帧的名称是唯一的情况下才有效,它们不在您的 OP 中):

    df3 <- Reduce(cbind,
           Map(function(x, y) cbind(df1[x], df2[y]), names(df1), names(df2))) 
    

    第二部分我会用这个:

    results <- sapply(seq(1,ncol(df3),2),
                            function(i) df3[order(df3[,i+1], decreasing = TRUE), ][1:7,i])
    

    如果您希望结果是一个 data.frame,只需这样做:

    results <- data.frame(results)
    

    【讨论】:

      猜你喜欢
      • 2018-03-16
      • 2023-01-04
      • 1970-01-01
      • 2019-10-09
      • 2021-02-26
      • 1970-01-01
      • 2022-01-04
      • 1970-01-01
      • 2022-01-05
      相关资源
      最近更新 更多