hack のためのネタ帳, etc,,,

承前


面倒なことしなくても、簡単な方法があった。
dplyr を使うのが定石らしい。

サンプルデータ

df = data.frame(A=c("a", "b", "a", "a", "a", "a", "b", "c"))
> df
  A
1 a
2 b
3 a
4 a
5 a
6 a
7 b
8 c

dplyer による countif 相当の処理

dplyr パッケージの group_by() と mutate() を使うと良いらしい。
以下で B 列が =countif(A$1:A1,A1) 相当、 C 列が =countif(A$1:A$最終行, A1) 相当となる。
result = df %>% 
  group_by(A) %>%
  mutate(B=1:length(A), C=length(A))
> result
# A tibble: 8 x 3
# Groups:   A [3]
  A         B     C
  <fct> <int> <int>
1 a         1     5
2 b         1     2
3 a         2     5
4 a         3     5
5 a         4     5
6 a         5     5
7 b         2     2
8 c         1     1

コメントをかく


「http://」を含む投稿は禁止されています。

利用規約をご確認のうえご記入下さい

Wiki内検索

フリーエリア

管理人/副管理人のみ編集できます