dataframe列中的Dataframes
我有dataframe_A,其中有一列,其中每一行都包含一个dataframe 下面是我所说的数据帧的dput:dataframe列中的Dataframes,r,list,dplyr,purrr,R,List,Dplyr,Purrr,我有dataframe_A,其中有一列,其中每一行都包含一个dataframe 下面是我所说的数据帧的dput: structure(list(spend = c("840.99", "1145.39", "1043.88", "1169.15", "1249.75", "1197.57"), actions = list(structure(list(action_type = c("like", "link_click", "post", "post_reaction", "page_
structure(list(spend = c("840.99", "1145.39", "1043.88", "1169.15",
"1249.75", "1197.57"), actions = list(structure(list(action_type = c("like",
"link_click", "post", "post_reaction", "page_engagement", "post_engagement"
), value = c("18", "205", "2", "28", "253", "235")), .Names =
c("action_type",
"value"), class = "data.frame", row.names = c(NA, 6L)), structure(list(
action_type = c("like", "link_click", "post", "post_reaction",
"page_engagement", "post_engagement"), value = c("26", "268",
"3", "33", "330", "304")), .Names = c("action_type", "value"
), class = "data.frame", row.names = c(NA, 6L)), structure(list(
action_type = c("like", "link_click", "post", "post_reaction",
"page_engagement", "post_engagement"), value = c("16", "214",
"2", "28", "260", "244")), .Names = c("action_type", "value"
), class = "data.frame", row.names = c(NA, 6L)), structure(list(
action_type = c("comment", "like", "link_click", "post",
"post_reaction", "page_engagement", "post_engagement"), value = c("2",
"14", "255", "2", "44", "317", "303")), .Names = c("action_type",
"value"), class = "data.frame", row.names = c(NA, 7L)), structure(list(
action_type = c("comment", "like", "link_click", "post",
"post_reaction", "page_engagement", "post_engagement"), value = c("1",
"15", "240", "1", "23", "280", "265")), .Names = c("action_type",
"value"), class = "data.frame", row.names = c(NA, 7L)), structure(list(
action_type = c("like", "link_click", "post", "post_reaction",
"page_engagement", "post_engagement"), value = c("16", "252",
"3", "32", "303", "287")), .Names = c("action_type", "value"
), class = "data.frame", row.names = c(NA, 6L))), date_start = c("2017-10-31",
"2017-11-01", "2017-11-02", "2017-11-03", "2017-11-04", "2017-11-05"
)), .Names = c("spend", "actions", "date_start"), class = c("data.table",
"data.frame"), row.names = c(NA, -6L), .internal.selfref = <pointer:
0x0000000000310788>)
您可以看到,每个数据帧对应于原始数据帧中的一行。如何提取这些数据帧并使行名成为将附加到原始数据帧的新列。我希望我的最终结果是这样的(当我这样做的时候,格式很奇怪,所以我不能写最后3列,但这些也应该填充):
任何帮助都会很好,谢谢 也许这种方法:
library(tidyverse)
z1 %>%
as.tibble() %>%
unnest() %>%
spread(action_type, value) #convert to wide format
#output
spend date_start comment like link_click page_engagement post post_engagement post_reaction
* <chr> <chr> <chr> <chr> <chr> <chr> <chr> <chr> <chr>
1 1043.88 2017-11-02 NA 16 214 260 2 244 28
2 1145.39 2017-11-01 NA 26 268 330 3 304 33
3 1169.15 2017-11-03 2 14 255 317 2 303 44
4 1197.57 2017-11-05 NA 16 252 303 3 287 32
5 1249.75 2017-11-04 1 15 240 280 1 265 23
6 840.99 2017-10-31 NA 18 205 253 2 235 28
您的
dput
表明您有一个data.table;你使用了data.table::fread
还是什么?我想是这样的!我来测试一下。谢谢我尝试使用相同格式的不同数据集执行此操作,但它出现了一个错误,即:错误:每列必须是向量列表或数据帧列表[操作]
找到了发生这种情况的原因,但不确定如何解决它。有一个actions
行的NULL
值。有没有办法让unnest
函数解释这个问题?如果有人感兴趣,这是处理NULL的一个很好的资源:@Nick Knauer我很高兴你找到了一个解决方案。向你致以亲切的问候。
df$actions
[[1]]
action_type value
1 like 18
2 link_click 205
3 post 2
4 post_reaction 28
5 page_engagement 253
6 post_engagement 235
[[2]]
action_type value
1 like 26
2 link_click 268
3 post 3
4 post_reaction 33
5 page_engagement 330
6 post_engagement 304
[[3]]
action_type value
1 like 16
2 link_click 214
3 post 2
4 post_reaction 28
5 page_engagement 260
6 post_engagement 244
[[4]]
action_type value
1 comment 2
2 like 14
3 link_click 255
4 post 2
5 post_reaction 44
6 page_engagement 317
7 post_engagement 303
[[5]]
action_type value
1 comment 1
2 like 15
3 link_click 240
4 post 1
5 post_reaction 23
6 page_engagement 280
7 post_engagement 265
[[6]]
action_type value
1 like 16
2 link_click 252
3 post 3
4 post_reaction 32
5 page_engagement 303
6 post_engagement 287
spend actions date_start comment like link_click post post_reaction page_engagement post_engagement
1: 840.99 <data.frame> 2017-10-31 0 18 205 2
2: 1145.39 <data.frame> 2017-11-01 0 26 268 3
3: 1043.88 <data.frame> 2017-11-02 0 16 214 2
4: 1169.15 <data.frame> 2017-11-03 2 14 255 2
5: 1249.75 <data.frame> 2017-11-04 1 15 240 1
6: 1197.57 <data.frame> 2017-11-05 0 16 252 3
t(df$actions[[1]])
library(tidyverse)
z1 %>%
as.tibble() %>%
unnest() %>%
spread(action_type, value) #convert to wide format
#output
spend date_start comment like link_click page_engagement post post_engagement post_reaction
* <chr> <chr> <chr> <chr> <chr> <chr> <chr> <chr> <chr>
1 1043.88 2017-11-02 NA 16 214 260 2 244 28
2 1145.39 2017-11-01 NA 26 268 330 3 304 33
3 1169.15 2017-11-03 2 14 255 317 2 303 44
4 1197.57 2017-11-05 NA 16 252 303 3 287 32
5 1249.75 2017-11-04 1 15 240 280 1 265 23
6 840.99 2017-10-31 NA 18 205 253 2 235 28
> dput(z1)
structure(list(spend = c("840.99", "1145.39", "1043.88", "1169.15",
"1249.75", "1197.57"), actions = list(structure(list(action_type = c("like",
"link_click", "post", "post_reaction", "page_engagement", "post_engagement"
), value = c("18", "205", "2", "28", "253", "235")), .Names = c("action_type",
"value"), class = "data.frame", row.names = c(NA, 6L)), structure(list(
action_type = c("like", "link_click", "post", "post_reaction",
"page_engagement", "post_engagement"), value = c("26", "268",
"3", "33", "330", "304")), .Names = c("action_type", "value"
), class = "data.frame", row.names = c(NA, 6L)), structure(list(
action_type = c("like", "link_click", "post", "post_reaction",
"page_engagement", "post_engagement"), value = c("16", "214",
"2", "28", "260", "244")), .Names = c("action_type", "value"
), class = "data.frame", row.names = c(NA, 6L)), structure(list(
action_type = c("comment", "like", "link_click", "post",
"post_reaction", "page_engagement", "post_engagement"), value = c("2",
"14", "255", "2", "44", "317", "303")), .Names = c("action_type",
"value"), class = "data.frame", row.names = c(NA, 7L)), structure(list(
action_type = c("comment", "like", "link_click", "post",
"post_reaction", "page_engagement", "post_engagement"), value = c("1",
"15", "240", "1", "23", "280", "265")), .Names = c("action_type",
"value"), class = "data.frame", row.names = c(NA, 7L)), structure(list(
action_type = c("like", "link_click", "post", "post_reaction",
"page_engagement", "post_engagement"), value = c("16", "252",
"3", "32", "303", "287")), .Names = c("action_type", "value"
), class = "data.frame", row.names = c(NA, 6L))), date_start = c("2017-10-31",
"2017-11-01", "2017-11-02", "2017-11-03", "2017-11-04", "2017-11-05"
)), .Names = c("spend", "actions", "date_start"), class = c("data.table",
"data.frame"), row.names = c(NA, -6L))