簡體   English   中英

列中的data.frame(小標題)

[英]data.frame (tibble) from columns

我有一個函數,返回固定長度的向量。 它不是此功能,但可以將其視為玩具示例:

foo = function(letter) {
    unlist(lapply(1:10, function (number) {paste(letter,number)}))
}

我有一個字母cols = c("A", "L", "B")的向量,我想創建一個小標題,其中每一列都是foo(letter)

# 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"))是使用data_frame("A"=foo("A"), "L"=foo("L"), "B"=foo("B")) ,但我不知道如何對任意長度的矢量cols執行此操作。

我確定這是基本的,無需for循環即可完成。

在競爭對手的框架中,我正在尋找的東西可以做到

pd.DataFrame({letter: foo(letter) for letter in cols})

我們可以使用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 沒有其他庫被加載

purrr::map_dfpurrr::map_df的一個版本,可將結果lapplylapply 為了簡化為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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM