r - 根据所选变量计算一个类别的频率
r - calculate frequency of one category based on selected variable
我有一个名为 stats 的数据框,其中包含两列 Gender 和 Transportation.used如下图:
Gender Transportation.used
Male Bus
Male Car
Female Car
Male Car
Male Motorcycle
Female Bus
列表还在继续……(或在此处查看:http://i.stack.imgur.com/GROIi.jpg)
data_stats <- read.table(text="Gender Transportation.used
Male Bus
Male Car
Female Car
Male Car
Male Motorcycle
Female Bus
Female Bus
Female Bus
Female Bus
Male Car
Female Car
",header=T)
我想做的是根据选择的交通工具计算性别频率。稍后我将需要这些数据来绘制百分比条形图。期望的输出如下:
Male Female
Bus 1 4
那么如何计算才能得到数据呢?我仍然是使用 R 的初学者,请帮助我。提前致谢!
尝试,对于频率,
table(stats)
或者,对于相对频率,
prop.table(table(stats))
或者,甚至更好(例如),
xtabs(male ~ car, data = stats)
我添加几个例子:
dt <- data.frame(gender = rep(c("Male", "Female"), c(4, 2) ), trans = rep(c("Car", "Bus", "Bike"), c(3, 2, 1) ))
table(dt)
trans
gender Bike Bus Car
Female 1 1 0
Male 0 1 3
无论如何,根据我从你的问题中得到的数据,我们正在处理因素。如果您想要更多的表格选项,您应该进行少量 class 转换。
编辑:
这里是您在评论中发布的问题的答案。通过调整dt$colname
的参数,您可以更好地控制最终输出。
table(dt$gender[dt$trans=="Car"])
Female Male
0 3
您可以使用 table
.
我们重新创建了您的 data.frame。请注意,最好提供 reproducible example
df <- read.table(text="
Gender Transportation.used
Male Bus
Male Car
Female Car
Male Car
Male Motorcycle
Female Bus", header=T)
那么你可以使用table:
table(df$Transportation.used, df$Gender) # here we type `df` twice
with(df, table(Transportation.used, Gender)) # `with` avoids that
在这种只有两列的特殊情况下,table(df)
也可以工作并产生所需的输出(尽管已转置)。
如果您确实希望 Male
作为 table
的第一列,您可以更改因数 Gender
的级别顺序(默认按字母顺序排列)
levels(df$Gender) # Female comes (alphabetically) before Male
df$Gender <- factor(df$Gender, levels=rev(levels(df$Gender))) # we rearrange Gender levels order
现在 with(df, table(Transportation.used, Gender))
正是您想要的输出。
Gender
Transportation.used Male Female
Bus 1 1
Car 2 1
Motorcycle 1 0
您可以从中得到的最基本的图表(但请参阅 ?barplot
)是:
tab <- with(df, table(Transportation.used, Gender))
barplot(tab)
(编辑)
那么,如果你想要table单传输模式,你可以:
with(df, table(Transportation.used, Gender))["Bus",, drop=FALSE ]
Gender
Transportation.used Female Male
Bus 1 1
我有一个名为 stats 的数据框,其中包含两列 Gender 和 Transportation.used如下图:
Gender Transportation.used
Male Bus
Male Car
Female Car
Male Car
Male Motorcycle
Female Bus
列表还在继续……(或在此处查看:http://i.stack.imgur.com/GROIi.jpg)
data_stats <- read.table(text="Gender Transportation.used
Male Bus
Male Car
Female Car
Male Car
Male Motorcycle
Female Bus
Female Bus
Female Bus
Female Bus
Male Car
Female Car
",header=T)
我想做的是根据选择的交通工具计算性别频率。稍后我将需要这些数据来绘制百分比条形图。期望的输出如下:
Male Female
Bus 1 4
那么如何计算才能得到数据呢?我仍然是使用 R 的初学者,请帮助我。提前致谢!
尝试,对于频率,
table(stats)
或者,对于相对频率,
prop.table(table(stats))
或者,甚至更好(例如),
xtabs(male ~ car, data = stats)
我添加几个例子:
dt <- data.frame(gender = rep(c("Male", "Female"), c(4, 2) ), trans = rep(c("Car", "Bus", "Bike"), c(3, 2, 1) ))
table(dt)
trans
gender Bike Bus Car
Female 1 1 0
Male 0 1 3
无论如何,根据我从你的问题中得到的数据,我们正在处理因素。如果您想要更多的表格选项,您应该进行少量 class 转换。
编辑:
这里是您在评论中发布的问题的答案。通过调整dt$colname
的参数,您可以更好地控制最终输出。
table(dt$gender[dt$trans=="Car"])
Female Male
0 3
您可以使用 table
.
我们重新创建了您的 data.frame。请注意,最好提供 reproducible example
df <- read.table(text="
Gender Transportation.used
Male Bus
Male Car
Female Car
Male Car
Male Motorcycle
Female Bus", header=T)
那么你可以使用table:
table(df$Transportation.used, df$Gender) # here we type `df` twice
with(df, table(Transportation.used, Gender)) # `with` avoids that
在这种只有两列的特殊情况下,table(df)
也可以工作并产生所需的输出(尽管已转置)。
如果您确实希望 Male
作为 table
的第一列,您可以更改因数 Gender
的级别顺序(默认按字母顺序排列)
levels(df$Gender) # Female comes (alphabetically) before Male
df$Gender <- factor(df$Gender, levels=rev(levels(df$Gender))) # we rearrange Gender levels order
现在 with(df, table(Transportation.used, Gender))
正是您想要的输出。
Gender
Transportation.used Male Female
Bus 1 1
Car 2 1
Motorcycle 1 0
您可以从中得到的最基本的图表(但请参阅 ?barplot
)是:
tab <- with(df, table(Transportation.used, Gender))
barplot(tab)
(编辑)
那么,如果你想要table单传输模式,你可以:
with(df, table(Transportation.used, Gender))["Bus",, drop=FALSE ]
Gender
Transportation.used Female Male
Bus 1 1