我想通過對考慮多個條件的值進行求和來構建一個新變量(以及另外一個,請參見下文)。在這裏你可以看到R代碼,直到像我目前的問題。如何通過有條件求和來填充新的數據幀列
# The raw dataframe
area <- c("A", "A", "B", "A", "C", "B", "A", "B", "A", "C")
varclass <- c("Z1", "Z1", "Z1", "Z2", "Z1", "Z1", "Z2", "Z1", "Z2", "Z2")
count <- c(45, 56, 2, 8, 345, 3, 98, 2, 6, 9)
df1 <- data.frame(area,
varclass,
count,
stringsAsFactors = FALSE)
df1
# See how df1 looks like...
# area varclass count
#1 A Z1 45
#2 A Z1 56
#3 B Z1 2
#4 A Z2 8
#5 C Z1 345
#6 B Z1 3
#7 A Z2 98
#8 B Z1 2
#9 A Z2 6
#10 C Z2 9
# Building the final dataframe
df2 <- data.frame(unique(df1$area),
stringsAsFactors = FALSE)
names(df2)[1] <- "area"
# See how df2 looks like...
# area
#1 A
#2 B
#3 C
# The new variable to build
df2$Z1_sum <- sum(df1[df1$varclass == "Z1" & df1$area == df2$area,]$count)
# doesn't work
# See what I hope
# area Z1_sum
#1 A 101
#2 B 7
#3 C 345
正如你在最後一行看到的,我想在df2數據庫中建立一個新的變量Z1_sum。 Z1_sum是df1數據庫的計數總和,其中varclass = "Z1"
和df1$area
符合當前行的值(在MS Excel中,表示使用LC1或$ A2單元ID)。
請考慮一個事實,即我並不是在尋找解決方案,通過使用條件組或者dcast
函數來直接構建df2中的df2 ...我只想要一個公式,該公式允許我返回正確的值我的新專欄。這是我的額外條件。爲什麼?這是因爲我接下來要用最複雜的公式來構建其他變量而不僅僅是一筆總和。通過了解如何進行這種有條件的操作,我希望繼續...
感謝您的幫助。
傑夫
謝謝。第一項提案正常,但與羅馬的提案相同。你的第二個對我來說很準確,但不適用於我的數據集。我收到錯誤消息:「$ < - 。data.frame'中的錯誤('* tmp *',AZ_tx,value = c(96L,24L,84L,12L,:替換有105行,數據有322」)。 –
這是真的。有可能克服它嗎?其他想法?我最初寧願添加一個像「&df1 $ area == ??」這樣的參數。哪裏?考慮到輸出行給出df2 $區域的相對值... –
非常感謝您的編輯。這是很不錯的。但是,我不想重新設計/更改數據框,因爲我希望在最後填充更多複雜操作的新列。承認我希望在一步中創建「newvar2」,結果是將Z1_sum除以Z2_sum並乘以100 ... –