我有一個數據框,我想設置一個更廣泛的支點(將在主要問題的結尾解釋最終目標,以防我可能會以一種令人費解的方式來解決這個問題並且有人可以指出一個更聰明的解決方案) . 為此,我想在我的數據框中添加一列,該列每次在列中重複一個值時都會增加。例如,如果我有以下數據框:
my_df1 <- data.frame(col1 = c("A","D","B","E","A","G","G","E","G"),
col2 = c(1, 3, 5, 4, 3, 1, 1, 5, 5))
my_df1
col1 col2
1 A 1
2 D 3
3 B 5
4 E 4
5 A 3
6 G 1
7 G 1
8 E 5
9 G 5
然後我想添加第三列,該列每次在 col1 中“重複”一個值時都會增加,指示到目前為止給定值在 col1 中出現的次數。我想要的數據框如下:
my_df2
col1 col2 col3
1 A 1 1
2 D 3 1
3 B 5 1
4 E 4 1
5 A 3 2
6 G 1 1
7 G 1 2
8 E 5 2
9 G 5 3
因此,第一次出現在 col1 中的值時,增量從 1 開始。例如,當第二次在列中看到“A”(在第 5 行中)時,col3 增量為 2。據我所知,這是類似於 SQL 中的 row_number 函數。有人能建議像這樣增加的最佳方法是什麼嗎?
這個練習的目的是在我的工作場所為一個 pivot_wider 設置一個數據框。使用所需的數據框,我的代碼和輸出將如下所示:
my_df2_wide <- pivot_wider(data = my_df2,
names_from = col3,
names_prefix = "occurrence_",
values_from = col2)
my_df2_wide
# A tibble: 6 x 4
col1 occurrence_1 occurrence_2 occurrence_3
<chr> <dbl> <dbl> <dbl>
1 A 1 3 NA
2 D 3 NA NA
3 B 5 NA NA
4 E 4 NA NA
5 G 1 1 5
6 C NA 5 NA
這是否有效:
library(dplyr)
my_df1 %>% group_by(col1) %>% mutate(col3 = row_number()) %>% ungroup()
# A tibble: 9 x 3
# Groups: col1 [5]
col1 col2 col3
<chr> <dbl> <int>
1 A 1 1
2 D 3 1
3 B 5 1
4 E 4 1
5 A 3 2
6 G 1 1
7 G 1 2
8 E 5 2
9 G 5 3
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句