簡體   English   中英

在 dataframe 中創建新列,條件是 R 中另一個列值的總和

[英]Creating new columns in dataframe conditional on the sum of another column value in R

我對 R 還很陌生,而且我還不能在網上找到解決我的問題的方法。 我有一個數據庫(以 csv 格式引入)。 頭部看起來像這樣:

數據頭

我感興趣的變量是性別(M 或 F)和血清陽性(O 或 1)。 我想做的是制作一個分組條形圖,例如,我可以顯示血清陽性/血清陰性雌性蝙蝠數量的總和與血清陽性/血清陰性雄性蝙蝠總數的總和。 讓我陷入困境的部分是獲取總和並繪制它們。 我試圖創建新變量來表示總和,我認為我可以只 plot 它們:

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 的總和。

在此處輸入圖像描述

首先,問題是您正在創建新列而不是新變量。 data2末尾的 4 列是那些各自的值。 從您的代碼中刪除data2$以對計數求和以創建新變量。

到plot,有兩種方式。 您可以使用條形圖或其他繪圖 plot 通過繪圖

plot(data2[1, 13:16])

(它采用您創建的新列的前 4 個值,或者如果您更改代碼以實際聲明新變量,則可以 plot 將這些值放入data.frame或向量中。

假設您的數據是這樣的(有更多列):

set.seed(123)
data2 <- data.frame(sex = sample(c('M', 'F'), 20, replace = TRUE), 
                    seropositive = sample(c(1, 0), 20, replace = TRUE))

你可以這樣做:

library(dplyr)
library(ggplot2)

data2 %>%
  count(sex, seropositive = factor(seropositive)) %>%
  ggplot() + aes(sex, n, fill = seropositive) + 
  geom_bar(stat = 'identity', position = 'dodge')

在此處輸入圖像描述

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM