r - 根据 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)
我已经浏览了很多堆栈帖子,但似乎无法找到解决方案 - 任何人都可以就我如何做以及我做错了什么提出建议吗?谢谢!
我正在编辑,因为我能够使用此代码获得我想要的部分内容:
ggplot(data2, aes(x=sex, y=seropositive)) + geom_bar(stat="identity")
现在我要添加的唯一内容是为每个性别显示 2 个条形图——一个表示血清阳性 = 1,另一个表示血清阳性 = 0。现在它正在绘制 seropositve=1 的总和。
解决方案
首先,问题是您正在创建新列而不是新变量。末尾的 4 列data2
是那些各自的值。从您的代码中删除data2$
以对计数求和以创建新变量。
要绘制,有两种方法。您可以通过绘制使用条形图或其他图来绘制
plot(data2[1, 13:16])
(它采用您创建的新列的前 4 个值,或者如果您更改代码以实际声明新变量,则可以将这些值放在 adata.frame
或向量中。
推荐阅读
- html - 将 div 并排放置
- python - 将 (.loc) 与 in 关键字一起使用时出现问题
- python - 带有日期时间对象的列表的最后一个元素
- android - Kotlin“不要用 setText 连接显示的文本。使用带有占位符的资源字符串。”
- node.js - 在 Windows 10 上重新安装 NodeJS 失败
- html - 如何从html中的输入字段播放视频
- lean - 快速简化表达式 'ite ("a"="b") x y'
- java - Maven 错误:无法找到或加载主类 Xms256m
- vue.js - 有没有办法使用 vuetify 或普通 vuejs 在同一页面(页面的不同部分)上显示多个显示
- django-rest-framework - 得到错误'元组'对象没有属性'值'