使用列表传递数据框名称时出现意外结果

时间:2019-08-01 04:14:51

标签: r dataframe melt

共有17个数据框,我将它们存储在列表中:

implementation 'org.eclipse.paho:org.eclipse.paho.client.mqttv3:1.2.1'

req_dfs

当我编写命令以返回融化数据帧时,由于仅传递单个数据帧即

,我得到了预期的结果
"data_Apr-18" "data_Apr-19" "data_Aug-18" "data_Aug-19" "data_Dec-18" "data_Feb-19" "data_Jan-19" "data_Jul-18" "data_Jul-19" "data_Jun-18" "data_Jun-19" "data_Mar-19" "data_May-18" "data_May-19" "data_Nov-18" "data_Oct-18" "data_Sep-18"

我得到了预期的结果:

nec_col <-c("ID","Code","Name","Last Files Processed Date","Last Report Sent Date")
melt_data <- melt(`data_Apr-18`,id.vars = nec_col)

我编写了一个循环,对每个数据帧执行合并,然后执行rbind。

melt_data 

    ID      Code           Name  Last Files Processed Date  Last Report Sent Date   Variable     Value
    3498    000199~3498    H1          30/7/2019                   31/7/2019        1-Apr-19      DONE
    3343    000225~3343    H2          27/6/2018                   28/6/2018        1-Apr-19    NOTEXT
    2117    000279~2117    H3          31/7/2019                   1/8/2019         1-Apr-19    DONE
    184     001888         H4          NA                          NA               1-Apr-19    NOTEXT
    2576    0037811~2576   H5          NA                          NA               1-Apr-19    NOTEXT
    3291    003929~3291    H6          2/10/2018                   3/10/2018        1-Apr-19    NOTEXT
    3497    004434~3497    H7          30/7/2019                   31/7/2019        1-Apr-19    NOTEXT
.                       
.                       
.                       
.                       
.                       
.                       
.                       
    3497    004434~3497 H7  30/7/2019       31/7/2019       3-Apr-19    NOTEXT

此循环返回意外结果:

for(i in req_dfs)
{

  nec_col <-c("ID","Code","Name","Last Files Processed Date","Last Report Sent Date")

  melt_data <- melt(i,id.vars = nec_col)

  melt_final <- rbind(melt_final,melt_data)

  print(paste0("finished processing: ", i))

}

我不知道如何将数据帧传递给循环中使用的melt函数。这可能是一个简单的问题,但是在过去的3个小时中,我一直在努力解决这个问题,但是没有任何进展。非常感谢您的帮助。

一个数据帧data_Apr-18的样本数据:

data_Apr-18
data_Apr-19
data_Aug-18
data_Aug-19
data_Dec-18
data_Feb-19
data_Jan-19
data_Jul-18
data_Jul-19
data_Jun-18
data_Jun-19
data_Mar-19
data_May-18
data_May-19
data_Nov-18
data_Oct-18
data_Sep-18

以防万一,如果您不理解示例数据,请附加图片 Sample Data

1 个答案:

答案 0 :(得分:3)

我认为您在req_dfs中拥有的只是数据帧的名称,您可以使用mget将其作为列表,然后使用lapply遍历每个{{1} }转换为长格式,然后使用melt将所有数据绑定到一个数据帧中。

rbindlist

或者,如果您想使用library(data.table) rbindlist(lapply(mget(req_dfs), melt, id.vars = nec_col)) ,我们可以将tidyverse / map_dfmap_dfr一起使用

gather