获取带有列表的列并与R中的其他列合并 – 使用fbRads

我正在使用fbRads包中的fb_insights,如下所示:(我在实际问题中使用了更多指标)

fb_campaigns< – rbindlist(lapply(l,function(l)cbind(Campaign = l $campaign_name,rbindlist(l $actions)))) 哦,我收到一些警告(我知道我做错了什么,但无法解决): 警告信息:
1:在data.table :: data.table(…)中:
  第1项的尺寸为11,但最大尺寸为104(可回收剩余的5件)

结果是数据框包含我需要的所有数据(Campaign,action_type,value),但是……带有“action_types”的列及其数字不按顺序排列.动作数据似乎不是来自行中的广告系列.

如何将动作类型与广告系列合并?

在我正确的行中的数据之后,我将使用reshape使用值生成action_types列.

我从fb Rads获得的数据和我想要转换的数据是这样的:
《获取带有列表的列并与R中的其他列合并 – 使用fbRads》

我使用我的代码获得的数据是这样的(格式是正常的,但不是值的顺序,它们不是广告系列的值)

《获取带有列表的列并与R中的其他列合并 – 使用fbRads》

最佳答案
daroczig给我解决方案,似乎工作正常!

## list of action types to extract
    actiontypes <- c('link_click', 'comment', 'like', 'post')

## extract actions from the data returned by the Insights API
    lactions <- unlist(lapply(l, function(x) x$actions), recursive = FALSE)

## extract fields from the actions
    library(data.table)
    lactions <- rbindlist(lapply(lactions, function(actions) {
        setnames(as.data.table(
            do.call(cbind,
                    lapply(actiontypes,
                           function(action) {
                               if (is.null(actions)) return(0)
                               value <- subset(actions, action_type == action, value)
                               if (nrow(value) == 0) return(0) else 

    return(value[[1]])
                               }))),
                actiontypes)
            }))

## Merging the dataframe with the original data and the dataframe with the actions
    fb_campaigns <- cbind(l[,c(1,4:11)],lactions))
点赞