共有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
答案 0 :(得分:3)
我认为您在req_dfs
中拥有的只是数据帧的名称,您可以使用mget
将其作为列表,然后使用lapply
遍历每个{{1} }转换为长格式,然后使用melt
将所有数据绑定到一个数据帧中。
rbindlist
或者,如果您想使用library(data.table)
rbindlist(lapply(mget(req_dfs), melt, id.vars = nec_col))
,我们可以将tidyverse
/ map_df
与map_dfr
一起使用
gather