【问题标题】:What is the wrong & how to compute the following program出了什么问题以及如何计算以下程序
【发布时间】:2026-02-25 03:10:01
【问题描述】:

以下是数据框:

  GENDER PROMOTE
  M      1
  M      0
  M      2
  F      1
  M      0
  F      2
  F      1
  F      1
  M      2
  F      0
  F      2
  F      1

M=男性; F=女

现在我必须找出女性的数量

(a) 推广==0 ; (b) 推广==1; (c) 推广==2

我的尝试:

data <- read.table("sum.txt",header=TRUE)
data

 s1=0;s2=0;s3=0

 for(i in 1:12){
   if(data$GENDER[i]==F & data$PROMOTE[i]==0){
     s1=s1+1
   } else if (data$GENDER[i]==F & data$PROMOTE[i]==1){
       s2=s2+1
    } else if (data$GENDER[i]==F & data$PROMOTE[i]==2){
        s3=s3+1
      }}

但是 s1,s2,s3 没有被修改。那些有它们的初始值。也没有发生错误。

这里有什么问题?以及计算任务的替代方法。

【问题讨论】:

  • F"F" 不同,你也想要 &amp;&amp; 而不是 &amp;。但是有更好的工具可以解决 R 中的问题。请通过提供 dput(data) 使您的示例可重现
  • 正如 baptiste 提到的,看看?table:table(data$GENDER, data$PROMOTE)。我还建议您花几分钟时间阅读网络上的一些 R 指南介绍,它们会提供很多信息!
  • 或者干脆table(data)
  • 更具体地说是with(subset(data,GENDER=="F"),table(PROMOTE))
  • 您可以在R中找到数据管理的基本功能here

标签: r loops for-loop if-statement


【解决方案1】:

使用plyr:

ddply(data[data$GENDER=='F',], .(GENDER),count)

得到:

  GENDER PROMOTE freq
1      F       0    1
2      F       1    4
3      F       2    2

这就是你要找的吗?

【讨论】:

  • 当你已经选择了一个子集时按 GENDER 拆分数据集似乎很奇怪。
  • 同意。如果不是最初的请求,我会放弃这个条件或做aaa&lt;-ddply(data, .(GENDER), count) ; aaa[aaa$GENDER=='F',]