【问题标题】:Making new variable conditional on responses for a set of other ones以对一组其他变量的响应为条件创建新变量
【发布时间】:2015-05-25 22:40:54
【问题描述】:

我是在这里编程的新手,所以我很抱歉这是一个初级问题。我在 R 工作。

我的数据集:简而言之,我有一个大约 30 种疾病的列表(其中一些包括哮喘、背痛等,它们不一定表示疾病,而是某种慢性病)。对于每个问题,受访者回答“1”如果他们患有这种疾病,“2”如果没有,如果他们不知道自己的疾病状况,则回答“88”。

我想创建一个名为“chronic”的新变量,它可以捕获所有患有 1、2 或 3+ 种慢性病的个体。当然,我可以坐在这里检查所有条件,但是有没有一种有效的方法来扫描每个特定的疾病列,如果参与者回答“1”,创建某种运行总和,以便在这个新的“ “慢性”变量表示他们患有慢性病的数量?

提前致谢

【问题讨论】:

  • 通常 no 表示为 0,yes 表示为 1。我建议用它替换你的值,以及用 88 替换 @ 987654321@。例如,您可以使用 sum() 来计算给定疾病或受访者的肯定答案数量。这可以通过df[df==88]=NA、df[df==2]=0 轻松完成。
  • @Molx 更好的主意.. 我会试试这个方法。我的 df 不仅包含疾病变量,还有其他人口统计变量,例如年龄等,编码为 2。有没有办法选择列的子集(疾病列)并设置“2”值像你建议的那样“0”?我想出了这样的东西.. 但是运行时,没有任何变化(8、24 代表列号):nhss[nhss[,c(8:24)==2]]=0
  • 如果您想限制对特定列的更改,请在对要更改的行进行子集化之前对这些列进行子集化:nhss[,8:24][nhss[,8:24]==2]=0。

标签: r variables conditional


【解决方案1】:

您需要使用apply functions 之一。在这种情况下,如果您的 data.frame 被称为 df,那么您可以使用 apply() 将响应数求和等于 1,如下所示:

apply(df,
      1, # apply for each row (i.e. the first margin)
      function(x)# a function which takes a row's worth of data as it's argument
           sum(x ==1))# and returns the number of responses equal to 1

【讨论】:

  • 这样会容易很多:rowSums( df == "1")
  • 一如既往地正确@BondedDust :)
  • 谢谢大家,这非常有帮助。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-07-15
  • 1970-01-01
  • 2020-07-14
  • 2019-08-16
  • 1970-01-01
相关资源
最近更新 更多