[英]Using mutate to create a new column with the first value of each group in R
我目前正在從事Sabermetric研究項目,整日忙於嘗試在數據框中創建一個新列,以顯示給定游戲的起始投手。 本質上,如果我使用下面的示例,則具有“ a”和“ b”的數據,但是我不知道如何為“ a”的每個唯一值創建“ c”作為“ b”的第一個值”。 這應該很容易,但是我才剛剛開始學習R。
a b c
1 1 1 1
2 1 2 1
3 1 3 1
4 1 4 1
5 1 5 1
6 1 6 1
7 2 7 7
8 2 8 7
9 2 1 7
10 2 2 7
11 2 3 7
12 2 4 7
13 3 5 5
14 3 6 5
15 3 7 5
到目前為止,我已經使用mutate
和group_by
提出了sample <- sample %>% group_by(a) %>% mutate(c = first(b))
但這只是使'c'的每個值成為第一個“ b”。 因此,在上面的示例中,我當前的代碼使'c'的每個值都等於1。
不太優雅,但是可以用,我希望它也對您有用:
df1 %>% group_by(a) %>% mutate(c = rep(first(b), length(a)))
Source: local data frame [15 x 3]
Groups: a [3]
a b c
(int) (int) (int)
1 1 1 1
2 1 2 1
3 1 3 1
4 1 4 1
5 1 5 1
6 1 6 1
7 2 7 7
8 2 8 7
9 2 1 7
10 2 2 7
11 2 3 7
12 2 4 7
13 3 5 5
14 3 6 5
15 3 7 5
使用庫dplyr
,您可以執行以下操作:
library(dplyr)
df %>% group_by(a) %>% mutate(c = b[1])
輸出如下:
Source: local data frame [15 x 3]
Groups: a [3]
a b c
(int) (int) (int)
1 1 1 1
2 1 2 1
3 1 3 1
4 1 4 1
5 1 5 1
6 1 6 1
7 2 7 7
8 2 8 7
9 2 1 7
10 2 2 7
11 2 3 7
12 2 4 7
13 3 5 5
14 3 6 5
15 3 7 5
將列更改為以下注釋和運行代碼中提到的類型會產生所需的輸出:
df$b <- as.factor(df$b)
df$a <- as.character(df$a)
str(df)
'data.frame': 15 obs. of 3 variables:
$ a: chr "1" "1" "1" "1" ...
$ b: Factor w/ 8 levels "1","2","3","4",..: 1 2 3 4 5 6 7 8 1 2 ...
$ c: int 1 1 1 1 1 1 7 7 7 7 ...
df %>% group_by(a) %>% mutate(c = b[1])
Source: local data frame [15 x 3]
Groups: a [3]
a b c
(chr) (fctr) (fctr)
1 1 1 1
2 1 2 1
3 1 3 1
4 1 4 1
5 1 5 1
6 1 6 1
7 2 7 7
8 2 8 7
9 2 1 7
10 2 2 7
11 2 3 7
12 2 4 7
13 3 5 5
14 3 6 5
15 3 7 5
我們可以使用base R
df1$c <- with(df1, ave(b, a, FUN= function(x) head(x,1)))
或與data.table
library(data.table)
setDT(df1)[, c:= head(b, 1), by = a]
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.