在R中对子集进行快速计算

3

非常感谢你提前的帮助。

我有以下数据:

set.seed(123)

    data <- data.frame (name=LETTERS[sample(1:26, 500, replace=T)],present=sample(0:1,500,replace = T))

我希望能够快速计算每个字母中出现观测值(1)的百分比,虽然可以手动完成,但我相信有更简单的方法:

library(dplyr)
A <- filter(data, name=="A" & present==1)
A2 <- filter(data, name=="A")
data$Percentage[data$name=="A"] <- nrow(A)/nrow(A2)

一直重复这个步骤,直到我到达“Z”。

我能否自动完成此任务,而不必手动更改“名称”列的值?

此致敬礼。


1
你可能需要使用 prop.table(table(data))[,1] - akrun
1个回答

3
我们可以使用prop.tabletable一起来获得比例。
prop.table(table(data), 1)[,2]

要将其作为列添加,我们可以通过与“names”匹配来扩展它。
data$Percentage <- prop.table(table(data), 1)[,2][as.character(data$name)]

或者如@Lars Lau Raket所建议的那样,我们不需要转换为character
prop.table(table(data), 1)[,2][data$name]

如果我们需要创建一列:
library(dplyr)
data %>%
     group_by(name) %>%
     mutate(Percentage = mean(present==1)) 

2
pt <- prop.table(table(data), 1)[,2]; data$pt <- pt[data$name] - Lars Lau Raket

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接