![](/img/trans.png)
[英]Mutating chosen columns in the data.frame or tibble with dplyr package R
[英]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_df
是purrr::map_df
的一個版本,可將結果lapply
為lapply
。 為了簡化為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.