首页 > 解决方案 > 根据 R 中另一列值的总和在数据框中创建新列

问题描述

我对 R 还很陌生,我还没有在网上找到解决我的问题的方法。我有一个数据库(以 csv 格式引入)。头部看起来像这样:

数据头

我感兴趣的变量是性别(M 或 F)和血清阳性(O 或 1)。我想做的是制作一个分组条形图,例如,我可以显示血清阳性/血清阴性雌性蝙蝠数量的总和与血清阳性/血清阴性雄性蝙蝠总数的总和。让我陷入困境的部分是获取总和并绘制它们。我试图创建新变量来表示总和,我认为我可以绘制它们:

data2$fp <- sum(data2$seropositive == 1 & data2$sex == "F") 
data2$fn <- sum(data2$seropositive == 0 & data2$sex == "F")
data2$mp <- sum(data2$seropositive == 1 & data2$sex == "M")
data2$mn <- sum(data2$seropositive == 0 & data2$sex == "M")

但这给了我一个新变量,其中每个观察的行值都相同 - 相应的总和: 在此处输入图像描述

重现数据

dput(head(data2, 20))
structure(data2)
str(data2)

来自 str(data2) 的输出

我已经浏览了很多堆栈帖子,但似乎无法找到解决方案 - 任何人都可以就我如何做以及我做错了什么提出建议吗?谢谢!

我正在编辑,因为我能够使用此代码获得我想要的部分内容:

ggplot(data2, aes(x=sex, y=seropositive)) + geom_bar(stat="identity")

现在我要添加的唯一内容是为每个性别显示 2 个条形图——一个表示血清阳性 = 1,另一个表示血清阳性 = 0。现在它正在绘制 seropositve=1 的总和。

在此处输入图像描述

标签: rsumconditional-statementsbar-chart

解决方案


首先,问题是您正在创建新列而不是新变量。末尾的 4 列data2是那些各自的值。从您的代码中删除data2$以对计数求和以创建新变量。

要绘制,有两种方法。您可以通过绘制使用条形图或其他图来绘制

plot(data2[1, 13:16])

(它采用您创建的新列的前 4 个值,或者如果您更改代码以实际声明新变量,则可以将这些值放在 adata.frame或向量中。


推荐阅读