我想获取列表列中每个向量的前 5 个值,并将其作为保存为列表的数据框中的新列返回。
\n\nstructure(list(sample_num = 1:6, vector = list(c(0, 1, 1, 0, \n1, 2, 0, 0, 3, 0), c(0, 0, 1, 2, 0, 0, 4, 10, 12, 1), c(1, 33, \n4, 4, 2, 2, 6, 9, 14, 2), c(0, 0, 1, 0, 1, 0, 1, 5, 3, 0), c(0, \n1, 1, 0, 0, 0, 1, 4, 3, 0), c(0, 0, 1, 0, 0, 0, 1, 1, 1, 0))), class = c("tbl_df", \n"tbl", "data.frame"), row.names = c(NA, -6L), .Names = c("sample_num", \n"vector"))\n\n> test\n# A tibble: 6 \xc3\x97 2\n sample_num vector\n <int> <list>\n1 1 <dbl [10]>\n2 2 <dbl [10]>\n3 3 <dbl [10]>\n4 4 <dbl [10]>\n5 5 <dbl [10]>\n6 6 <dbl [10]>\nRun Code Online (Sandbox Code Playgroud)\n\n我尝试使用 lmap 但收到错误消息
\n\n> test %>% lmap(.$vector,.f = function(x) x[1:5])\nError in .f(.x[i], ...) : \n unused argument (list(c(0, 1, 1, 0, 1, 2, 0, 0, 3, 0), c(0, 0, 1, 2, 0, 0, 4, 10, 12, 1), c(1, 33, 4, 4, 2, 2, 6, 9, 14, 2), c(0, 0, 1, 0, 1, 0, 1, 5, 3, 0), c(0, 1, 1, 0, 0, 0, 1, 4, 3, 0), c(0, 0, 1, 0, 0, 0, 1, 1, 1, 0)))\nRun Code Online (Sandbox Code Playgroud)\n\n谢谢你!
\n这就是你想要做的吗?
\n\nstructure(list(sample_num = 1:6, vector = list(c(0, 1, 1, 0, \n1, 2, 0, 0, 3, 0), c(0, 0, 1, 2, 0, 0, 4, 10, 12, 1), c(1, 33, \n4, 4, 2, 2, 6, 9, 14, 2), c(0, 0, 1, 0, 1, 0, 1, 5, 3, 0), c(0, \n1, 1, 0, 0, 0, 1, 4, 3, 0), c(0, 0, 1, 0, 0, 0, 1, 1, 1, 0))), class = c("tbl_df", \n"tbl", "data.frame"), row.names = c(NA, -6L), .Names = c("sample_num", \n"vector"))\n\ntest$new = lapply(test$vector, function(x) {x[1:5]})\ntest\n\n# A tibble: 6 \xc3\x97 3\n sample_num vector new\n <int> <list> <list>\n1 1 <dbl [10]> <dbl [5]>\n2 2 <dbl [10]> <dbl [5]>\n3 3 <dbl [10]> <dbl [5]>\n4 4 <dbl [10]> <dbl [5]>\n5 5 <dbl [10]> <dbl [5]>\n6 6 <dbl [10]> <dbl [5]>\n\n\ntest$vector[3]\n[[1]]\n [1] 1 33 4 4 2 2 6 9 14 2\n\ntest$new[3]\n[[1]]\n[1] 1 33 4 4 2\nRun Code Online (Sandbox Code Playgroud)\n\n如果要使用 dplyr 语法,请先定义一个函数:
\n\nf = function(x) {\n return(list(x[1:5]))\n }\nRun Code Online (Sandbox Code Playgroud)\n\n然后,将其按行应用到列vector
test = test %>%\n rowwise() %>%\n mutate(new_dplyr = f(vector))\n\ntest\n# A tibble: 6 \xc3\x97 3\n sample_num vector new_dplyr\n <int> <list> <list>\n1 1 <dbl [10]> <dbl [5]>\n2 2 <dbl [10]> <dbl [5]>\n3 3 <dbl [10]> <dbl [5]>\n4 4 <dbl [10]> <dbl [5]>\n5 5 <dbl [10]> <dbl [5]>\n6 6 <dbl [10]> <dbl [5]>\n\ntest$vector[3]\n[[1]]\n [1] 1 33 4 4 2 2 6 9 14 2\n\ntest$new_dplyr[3]\n[[1]]\n[1] 1 33 4 4 2\nRun Code Online (Sandbox Code Playgroud)\n