我想以阵列格式列出每个Diet组(有四个)中有多少个Time> 21。
我试图在RStudio中解决此问题。
data(ChickWeight)
newdata <- subset(ChickWeight, Time >= 21, select=Diet)
为了找到newdata中有多少个观测值,我使用了
nrow(newdata)
,
但是我想通过使它成为该表达式的一部分来找出有多少观察符合标准:
newdata <- subset(ChickWeight, Time >= 21, select=Diet)
这样,当我显示newdata
时,该表还将在新列中包含满足条件的观测值的数量。
期望输出:
Diet Number Observations
1 200 (I just created the numbers for this column as examples)
2 75
3 150
4 100
有办法吗?
答案 0 :(得分:5)
可以在base
中完成
transform(table(Diet=subset(ChickWeight, Time >= 21, select=Diet)))
#> Diet Freq
#> 1 1 16
#> 2 2 10
#> 3 3 10
#> 4 4 9
答案 1 :(得分:1)
我们可以使用summarize
中的dplyr
来做到这一点:
library(dplyr)
newdata %>%
group_by(Diet) %>%
summarize(Num_Obs = n())
我们甚至可以将subset
组合到单个dplyr
工作流程中:
ChickWeight %>%
filter(Time >= 21) %>%
group_by(Diet) %>%
summarize(Num_Obs = n())
输出:
# A tibble: 4 x 2
Diet Num_Obs
<fct> <int>
1 1 16
2 2 10
3 3 10
4 4 9
答案 2 :(得分:1)
在aggregate
调用之后考虑一个简单的subset
:
newdata <- subset(ChickWeight, Time >= 21, select=Diet)
aggregate(cbind(Obs=Diet) ~ Diet, newdata, FUN=length)
# Diet Obs
# 1 1 16
# 2 2 10
# 3 3 10
# 4 4 9
答案 3 :(得分:0)
这是数据表方法
library(data.table)
df <- as.data.table(ChickWeight)
df[Time >= 21, .(Number = .N), by = Diet]
# Diet Number
# 1: 1 16
# 2: 2 10
# 3: 3 10
# 4: 4 9