【问题标题】:How to creat a new data set based on rows of one variable from an existing dataset while each row has multiple observations如何根据现有数据集中一个变量的行创建新数据集,而每一行都有多个观察值
【发布时间】:2021-07-19 05:02:26
【问题描述】:

我有一个具有以下结构的数据集:

变量“类”= 1,..,50 每个班级都有多个观察结果:从 2000(第 1 类中的#obs)到 200(第 50 类中的#obs) 每个班级中每个人的变量年龄、性别、艾滋病毒

我要做的是从这个原始数据集中创建数据,每行显示变量“类”(另一方面,50 行,而不是原始数据集的大约 10000 行)和用你看到的变量。

我是 R 的新手,所以我不确定如何以例如第 1 行显示第 1 类但包含 2000 个人的年龄、性别和 HIV 信息的方式压缩(?!)数据!

我需要这个新数据集,因为我正在编写一个函数(glm),该函数的数据源不应该是原始数据,它应该基于类! 但是这个glm的预测将在个人层面上! (关于原始数据)

谁能帮我帮忙或提示一下?

这是一个小规模的数据,如下所示:

library(simstudy)

Class <- defData(varname = "Class", dist = "categorical", formula = "0.8;0.2", id="Class1")

Class <- defData(Class, varname = "Classic", dist = "categorical", formula = "0.8;0.2")

Class <- defData(Class, varname = "clustersize",dist = "normal", formula = "5", variance = 0)

d1 <- genData(1, Class) #'
d1

dF1 <- genCluster(d1, cLevelVar = "Class", numIndsVar = "clustersize", level1ID = "Class1")
dF1

Class2<- defData(varname = "Class", dist = "categorical", formula = "0.3;0.2;0.1;0.3;0.1", id="Class1")

Class2 <- defData(Class2, varname = "Classic", dist = "categorical", formula = "0.3;0.2;0.1;0.3;0.1")

Class2 <- defData(Class2, varname = "clustersize",dist = "noZeroPoisson", formula = "3")


d2 <- genData(3, Class2) #'
d2

dF2 <- genCluster(d2, cLevelVar = "Class", numIndsVar = "clustersize", level1ID = "Class1")
dF2

d<-rbind(dF1,dF2)

v <- defDataAdd( varname = "Age", dist = "normal", formula = "20", variance = 10)

v <- defDataAdd(v, varname = "Sex", dist = "binary", formula = "0.4", link = "logit")

v <- defDataAdd(v, varname = "HIV", dist = "binary", formula = "0.7", link = "logit")

d <- addColumns(v, d)

Y<- defDataAdd( varname = "Y", dist = "binary", formula = "0.1*Age+0.2*Sex+0.5*HIV", link = "logit")

d <- addColumns(Y, d)

d

让我们这样说吧。 “d”是我拥有的原始数据集,根据我给出的代码有 16 行(个人)。现在我想按年龄、性别、艾滋病毒对 Y 进行建模,但该模型应该使用的数据不是“d”,它必须是从“d”中提取的新数据集,最终得到 3行(因为我有 3 个班级)。所以我的困惑是,当我在第 1 类中有 11 个人、在第 2 类中有 2 个人、在第 3 类中有 3 个人时,我该怎么做(从 d 创建一个新数据集)。所以我将在这个新数据集中运行模型,并将在原始数据集“d”中预测它

【问题讨论】:

  • 欢迎海拉。你可以添加你已经尝试过的吗?尝试创建 MWE。
  • @mharinga 你好!是的,我将给出我所指的数据的小规模作为单独的答案,但是,我还没有尝试任何代码,因为我不知道应该如何使用或使用什么!
  • 完美。您可以通过编辑您的问题来包含您的可重现示例。
  • 就像@mharinga 所说的那样——一个可重复的例子——不确定那是什么?在这里阅读如何做到这一点:stackoverflow.com/questions/5963269/…
  • @mharinga 完成! :) 谢谢!我是新来的,所以我不确定是否有任何特定区域可以放置代码!我只是把它们写在正文中

标签: r data-structures statistics dataset glm


【解决方案1】:

感谢您更新问题。但是,我无法重现您的示例。该代码给出了一个错误。如果您想估计 GLM,您可以先创建因子,然后拟合 GLM。我不清楚你所说的类是什么意思。

假设您有以下数据mtcars,并希望通过vsgearcyl 建模。然后你可以先为vsgear创建因子,然后在glm中使用新数据。

library(dplyr)

# Change vs and gear to factors
mtcars1 <- mtcars %>%
  mutate(across(c(vs,gear), as.factor))

比较以下两个:

glm(cyl ~ vs + gear, data = mtcars1)
glm(cyl ~ vs + gear, data = mtcars)

第一个使用因子,第二个使用数值。

【讨论】:

  • 谢谢!但这并不是我所困惑的。我再次编辑了代码,它现在应该可以工作了。但是对于类,也许我可以说“集群”,但类在这段代码中基本上是一个变量,我们将有 3 个类,每个类都有几个人。
  • 我的问题基本上是这样的:如何创建一个包含 3 行(因为我们有 3 个类)和变量 Age、Sex、HIV 的数据集。我的困惑是:当每个班级都有几个人时,我们怎么能做到这一点。
  • 您能否将所需的输出添加到您的问题中
  • 好的!让我们这样说吧。 “d”是我拥有的原始数据集,根据我给出的代码有 16 行(个人)。现在我想按年龄、性别、艾滋病毒对 Y 进行建模,但该模型应该使用的数据不是“d”,它必须是从“d”中提取的新数据集,最终得到 3行(因为我有 3 个班级)。所以我的困惑是,当我在第 1 类中有 11 个人、在第 2 类中有 2 个人、在第 3 类中有 3 个人时,我该怎么做(从 d 创建一个新数据集)。所以我将在这个新数据集中运行模型,并将在原始数据集“d”中预测它
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2023-01-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-01-18
相关资源
最近更新 更多