有没有一种方法可以使用R从多个列中采样数据

时间:2019-11-20 21:33:48

标签: r

说我有以下数据集(该数据集包含2000多个观察值)。我想获得左撇子,脉搏大于或等于80并用右手拍手的男性比例(数量)。

如何在R中做到这一点?

 X    Sex WrHnd NWHnd  WHnd    Fold Pulse    Clap Exer
1   1 Female  18.5  18.0 Right  R on L    92    Left Some
2   2   Male  19.5  20.5  Left  R on L   104    Left None
3   3   Male  18.0  13.3 Right  L on R    87 Neither None
4   4   Male  18.8  18.9 Right  R on L    NA Neither None
5   5   Male  20.0  20.0 Right Neither    35   Right Some
6   6 Female  18.0  17.7 Right  L on R    64   Right Some

3 个答案:

答案 0 :(得分:1)

这是在末尾给您号码的一种方式。我故意为Left拍手计算得出此小样本的输出,但是您可以在大数据中将其更改为Right

library(dplyr)
df2 <- df %>% 
  filter(Sex == "Male" & WHnd == "Left" & Pulse >= 80 & Clap == "Left") %>% 
  count(.)

> df2
# A tibble: 1 x 1
      n
  <int>
1     1

答案 1 :(得分:0)

您可以使用dplyr首先创建一个满足所有条件的所有行的数据框

library(dplyr)
select_Df <- df %>% filter(Sex == "Male" & WHnd == "Left" & Pulse >= 80 & Clap == "Right")

然后,通过将新数据框中包含的个体数量除以原始数据框中的个体总数,可以得出该群体在整个人口中所占的比例:

nrow(select_Df) / nrow(df)

答案 2 :(得分:0)

您不需要dplyr

使用data.frame为df,您可以按以下方式计算此比例:

sum(df$Sex=='Male' & df$Whnd=='Left' & df$Pulse >= 80 & df$Clap=='Right') / nrow(df)

因为在R中,sum(TRUE)1sum(c(TRUE, TRUE))2,等等。