如何在列表列上应用一个函数并在dplyr和purrr中返回另一个函数?
我想获取列表列中每个向量的前5个值,并在保存为列表的数据框中将其作为新列返回如何在列表列上应用一个函数并在dplyr和purrr中返回另一个函数?,r,dplyr,purrr,R,Dplyr,Purrr,我想获取列表列中每个向量的前5个值,并在保存为列表的数据框中将其作为新列返回 structure(list(sample_num = 1:6, vector = 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,
structure(list(sample_num = 1:6, vector = 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))), class = c("tbl_df",
"tbl", "data.frame"), row.names = c(NA, -6L), .Names = c("sample_num",
"vector"))
> test
# A tibble: 6 × 2
sample_num vector
<int> <list>
1 1 <dbl [10]>
2 2 <dbl [10]>
3 3 <dbl [10]>
4 4 <dbl [10]>
5 5 <dbl [10]>
6 6 <dbl [10]>
谢谢大家! 这就是你想要做的吗
structure(list(sample_num = 1:6, vector = 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))), class = c("tbl_df",
"tbl", "data.frame"), row.names = c(NA, -6L), .Names = c("sample_num",
"vector"))
test$new = lapply(test$vector, function(x) {x[1:5]})
test
# A tibble: 6 × 3
sample_num vector new
<int> <list> <list>
1 1 <dbl [10]> <dbl [5]>
2 2 <dbl [10]> <dbl [5]>
3 3 <dbl [10]> <dbl [5]>
4 4 <dbl [10]> <dbl [5]>
5 5 <dbl [10]> <dbl [5]>
6 6 <dbl [10]> <dbl [5]>
test$vector[3]
[[1]]
[1] 1 33 4 4 2 2 6 9 14 2
test$new[3]
[[1]]
[1] 1 33 4 4 2
然后,将其按行应用于列vector
test = test %>%
rowwise() %>%
mutate(new_dplyr = f(vector))
test
# A tibble: 6 × 3
sample_num vector new_dplyr
<int> <list> <list>
1 1 <dbl [10]> <dbl [5]>
2 2 <dbl [10]> <dbl [5]>
3 3 <dbl [10]> <dbl [5]>
4 4 <dbl [10]> <dbl [5]>
5 5 <dbl [10]> <dbl [5]>
6 6 <dbl [10]> <dbl [5]>
test$vector[3]
[[1]]
[1] 1 33 4 4 2 2 6 9 14 2
test$new_dplyr[3]
[[1]]
[1] 1 33 4 4 2
test=test%>%
行()
变异(新的_dplyr=f(载体))
测验
#一个tibble:6×3
样本数向量新值
1 1
2 2
3 3
4 4
5 5
6 6
测试$vector[3]
[[1]]
[1] 1 33 4 4 2 2 6 9 14 2
测试$new\u dplyr[3]
[[1]]
[1] 1 33 4 4 2
这就是你想要做的吗
structure(list(sample_num = 1:6, vector = 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))), class = c("tbl_df",
"tbl", "data.frame"), row.names = c(NA, -6L), .Names = c("sample_num",
"vector"))
test$new = lapply(test$vector, function(x) {x[1:5]})
test
# A tibble: 6 × 3
sample_num vector new
<int> <list> <list>
1 1 <dbl [10]> <dbl [5]>
2 2 <dbl [10]> <dbl [5]>
3 3 <dbl [10]> <dbl [5]>
4 4 <dbl [10]> <dbl [5]>
5 5 <dbl [10]> <dbl [5]>
6 6 <dbl [10]> <dbl [5]>
test$vector[3]
[[1]]
[1] 1 33 4 4 2 2 6 9 14 2
test$new[3]
[[1]]
[1] 1 33 4 4 2
然后,将其按行应用于列vector
test = test %>%
rowwise() %>%
mutate(new_dplyr = f(vector))
test
# A tibble: 6 × 3
sample_num vector new_dplyr
<int> <list> <list>
1 1 <dbl [10]> <dbl [5]>
2 2 <dbl [10]> <dbl [5]>
3 3 <dbl [10]> <dbl [5]>
4 4 <dbl [10]> <dbl [5]>
5 5 <dbl [10]> <dbl [5]>
6 6 <dbl [10]> <dbl [5]>
test$vector[3]
[[1]]
[1] 1 33 4 4 2 2 6 9 14 2
test$new_dplyr[3]
[[1]]
[1] 1 33 4 4 2
test=test%>%
行()
变异(新的_dplyr=f(载体))
测验
#一个tibble:6×3
样本数向量新值
1 1
2 2
3 3
4 4
5 5
6 6
测试$vector[3]
[[1]]
[1] 1 33 4 4 2 2 6 9 14 2
测试$new\u dplyr[3]
[[1]]
[1] 1 33 4 4 2
这使用一个紧凑的调用序列。我第一次尝试使用“[”,就像我在lapply或sapply用法中使用的一样,但需要使用backticks才能成功:
> test$new <- map(test$vector,.f = `[`, 1:5)
> test
# A tibble: 6 × 3
sample_num vector new
<int> <list> <list>
1 1 <dbl [10]> <dbl [5]>
2 2 <dbl [10]> <dbl [5]>
3 3 <dbl [10]> <dbl [5]>
4 4 <dbl [10]> <dbl [5]>
5 5 <dbl [10]> <dbl [5]>
6 6 <dbl [10]> <dbl [5]>
>测试$new测试
#一个tibble:6×3
样本数向量新
1 1
2 2
3 3
4 4
5 5
6 6
这使用了一个紧凑的调用序列。我第一次尝试使用“[”作为lapply或sapply的用法,但需要反勾号才能成功:
> test$new <- map(test$vector,.f = `[`, 1:5)
> test
# A tibble: 6 × 3
sample_num vector new
<int> <list> <list>
1 1 <dbl [10]> <dbl [5]>
2 2 <dbl [10]> <dbl [5]>
3 3 <dbl [10]> <dbl [5]>
4 4 <dbl [10]> <dbl [5]>
5 5 <dbl [10]> <dbl [5]>
6 6 <dbl [10]> <dbl [5]>
>测试$new测试
#一个tibble:6×3
样本数向量新
1 1
2 2
3 3
4 4
5 5
6 6
是的!我想我在定义匿名函数时错过了{}。有没有其他方法可以使用管道操作?是的!我想我在定义匿名函数时错过了{}。有没有其他方法可以使用管道操作?