![](/img/trans.png)
[英]Collapse a dataframe, creating new columns with name being the unique values of another column, and value based on the value of another column? In 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)
我已經瀏覽了很多堆棧帖子,但似乎無法找到解決方案 - 任何人都可以就我如何做以及我做錯了什么提出建議嗎? 謝謝!
我正在編輯,因為我能夠使用此代碼獲得我想要的部分內容:
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.