データフレームがあります df
次のようになります。 gender
列は factor
2つのレベル:
gender age
m 18
f 14
m 18
m 18
m 15
f 15
私は新しい列を追加したいと思います count
単純にその回数を反映したものです gender
レベルがデータフレームに表示されます。最終的に、データフレームは次のようになります。
gender age count
m 18 4
f 14 2
m 18 4
m 18 4
m 15 4
f 15 2
私は私ができることを知っている table(df$gender)
その要因が出現する回数がわかりますが、その結果をどのように新しい列に変換するのか分かりません df
。どのように私は table
新しいカラムを実現するにはより良い方法がありますか?
回答:
回答№1の場合は3あなたが試みてもよい ave
:
# first, convert "gender" to class character
df$gender <- as.character(df$gender)
df$count <- as.numeric(ave(df$gender, df$gender, FUN = length))
df
# gender age count
# 1 m 18 4
# 2 f 14 2
# 3 m 18 4
# 4 m 18 4
# 5 m 15 4
# 6 f 15 2
@flodelのコメントに続く更新 - ありがとう!
df <- transform(df, count = ave(age, gender, FUN = length))
回答№2については4
以来 gender
要因である場合、それを使用して table
出力:
dat$count <- table(dat$gender)[dat$gender]
または繰り返しを避けるために dat$
あまりにも多くの時間:
dat <- transform(dat, count = table(gender)[gender])
回答№3の場合は1
使用 plyr
:
library(plyr)
ddply(dat,.(gender),transform,count=length(age))
gender age count
1 f 14 2
2 f 15 2
3 m 18 4
4 m 18 4
5 m 18 4
6 m 15 4
回答№4の場合は1
そして、 data.table
バージョンの良い指標。
library(data.table)
df <- as.data.table(df)
いったん data.table
それは単純な操作です:
df[,count := .N,by="gender"]
df
# gender age count
#1: m 18 4
#2: f 14 2
#3: m 18 4
#4: m 18 4
#5: m 15 4
#6: f 15 2
回答№5の場合は0
カウントを設定して、このようなことをすることはできますが、それは正確にはエレガントではありません。
m.cnt <- length(which(df$gender == "m"))
f.cnt <- length(which(df$gender == "f"))
df$count <- NA
df$count[which(df$gender == "m")] <- m.cnt
df$count[which(df$gender == "f")] <- f.cnt
代わりにplyrを使うこともできますが、同じことを何度も何度も再計算することになります。これは2つの要素しかないので価値がないかもしれません。