来自列的data.frame(tibble)

时间:2017-02-27 05:09:26

标签: r dplyr

我有一个返回固定长度矢量的函数。它不是这个功能,但将其视为一个玩具示例:

let data : [string:Any] = parsedData.value(key: "data")
let aatrox : [string:Any] = data["Aatrox"]
print("**id**\(aatrox["id"])") 

我有一个字母foo = function(letter) { unlist(lapply(1:10, function (number) {paste(letter,number)})) } 的矢量,我想创建一个每列为cols = c("A", "L", "B")的tibble:

foo(letter)

以上的tibble是用# A tibble: 10 × 3 A L B <chr> <chr> <chr> 1 A 1 L 1 B 1 2 A 2 L 2 B 2 3 A 3 L 3 B 3 4 A 4 L 4 B 4 5 A 5 L 5 B 5 6 A 6 L 6 B 6 7 A 7 L 7 B 7 8 A 8 L 8 B 8 9 A 9 L 9 B 9 10 A 10 L 10 B 10 制作的,但我不知道如何为任意长度的data_frame("A"=foo("A"), "L"=foo("L"), "B"=foo("B"))传递。

我确定这是基本的,可以在没有for循环的情况下完成。

在竞争框架中,我正在寻找的是

cols

2 个答案:

答案 0 :(得分:1)

我们可以使用lapply

library(dplyr)
tbl_df(setNames(data.frame(lapply(cols, foo)), cols))
# A tibble: 10 × 3
#        A      L      B
#   <fctr> <fctr> <fctr>
#1     A 1    L 1    B 1
#2     A 2    L 2    B 2
#3     A 3    L 3    B 3
#4     A 4    L 4    B 4
#5     A 5    L 5    B 5
#6     A 6    L 6    B 6
#7     A 7    L 7    B 7
#8     A 8    L 8    B 8
#9     A 9    L 9    B 9
#10   A 10   L 10   B 10

或另一种选择是

setNames(tbl_df(matrix(foo(cols), ncol=3, byrow=TRUE)), cols)
# A tibble: 10 × 3
#       A     L     B
#    <chr> <chr> <chr>
#1    A 1   L 1   B 1
#2    A 2   L 2   B 2
#3    A 3   L 3   B 3
#4    A 4   L 4   B 4
#5    A 5   L 5   B 5
#6    A 6   L 6   B 6
#7    A 7   L 7   B 7
#8    A 8   L 8   B 8
#9    A 9   L 9   B 9
#10  A 10  L 10  B 10

注意:仅使用dplyr。没有加载其他库

答案 1 :(得分:1)

purrr::map_dflapply的一个版本,它将结果强制转换为tibble。要简化data.frame,必须命名向量,您可以使用set_names

library(purrr)

c("A", "L", "B") %>% set_names() %>% map_df(foo)

## # A tibble: 10 × 3
##        A     L     B
##    <chr> <chr> <chr>
## 1    A 1   L 1   B 1
## 2    A 2   L 2   B 2
## 3    A 3   L 3   B 3
## 4    A 4   L 4   B 4
## 5    A 5   L 5   B 5
## 6    A 6   L 6   B 6
## 7    A 7   L 7   B 7
## 8    A 8   L 8   B 8
## 9    A 9   L 9   B 9
## 10  A 10  L 10  B 10
相关问题