总结单列的使用条件
Summarize using condition for a single column
示例数据:
df <- data.frame(HELP = c("Yes", "Yes", "Yes", "No", "Yes", "No"))
我做到了:
cdata <- ddply(df, c("HELP"), summarise,
Total = sum(df$HELP == 'No'),
Probability = Total/nrow(df))
但 "Yes" 的值与 "No" 保持相同的值。我尝试使用 "if" 条件但没有用。
我想做的是通过Help总结一下df.help == "No"
的总和和df.help == "Yes"
的总和,以及它们各自的概率。
最终结果应该是这样的:
| | Help | Total | Probability |
|----|------|-------|--------------|
| 1 | Yes | 4 | 0.666 |
| 2 | No | 2 | 0.333 |
用 ddply 或其他方式解决这个问题的合适方法是什么?
此致
我建议使用 dplyr
,正如您标记的那样。这使您可以使用 group_by
轻松对数据进行分组,使用 summarise
和 mutate
您可以添加新列以获得所需的结果。
> library(dplyr)
> df %>% group_by(HELP) %>% summarise(Total = n()) %>% mutate(Probability = Total / sum(Total))
# A tibble: 2 x 3
HELP Total Probability
<fctr> <int> <dbl>
1 No 2 0.3333333
2 Yes 4 0.6666667
说明
%>%
将左侧命令的输出转发到运算符右侧的命令。您可以将多个命令彼此串联在一起,但尽管这样做有效,但很快就会变得一团糟。
group_by(HELP)
会将您的数据框分成 HELP
中具有相同值的那些行。它也可以包含多个列。
summarise(Total = n())
-- n()
是另一个 dplyr
函数,它设置为您组中的行数。在 summarise
和 mutate
中都提供了新的列名 without '
or "
mutate(Probability = Total / sum(Total))
-- 简单计算,根据前面步骤中刚刚计算的结果
示例数据:
df <- data.frame(HELP = c("Yes", "Yes", "Yes", "No", "Yes", "No"))
我做到了:
cdata <- ddply(df, c("HELP"), summarise,
Total = sum(df$HELP == 'No'),
Probability = Total/nrow(df))
但 "Yes" 的值与 "No" 保持相同的值。我尝试使用 "if" 条件但没有用。
我想做的是通过Help总结一下df.help == "No"
的总和和df.help == "Yes"
的总和,以及它们各自的概率。
最终结果应该是这样的:
| | Help | Total | Probability |
|----|------|-------|--------------|
| 1 | Yes | 4 | 0.666 |
| 2 | No | 2 | 0.333 |
用 ddply 或其他方式解决这个问题的合适方法是什么?
此致
我建议使用 dplyr
,正如您标记的那样。这使您可以使用 group_by
轻松对数据进行分组,使用 summarise
和 mutate
您可以添加新列以获得所需的结果。
> library(dplyr)
> df %>% group_by(HELP) %>% summarise(Total = n()) %>% mutate(Probability = Total / sum(Total))
# A tibble: 2 x 3
HELP Total Probability
<fctr> <int> <dbl>
1 No 2 0.3333333
2 Yes 4 0.6666667
说明
%>%
将左侧命令的输出转发到运算符右侧的命令。您可以将多个命令彼此串联在一起,但尽管这样做有效,但很快就会变得一团糟。
group_by(HELP)
会将您的数据框分成 HELP
中具有相同值的那些行。它也可以包含多个列。
summarise(Total = n())
-- n()
是另一个 dplyr
函数,它设置为您组中的行数。在 summarise
和 mutate
中都提供了新的列名 without '
or "
mutate(Probability = Total / sum(Total))
-- 简单计算,根据前面步骤中刚刚计算的结果