![](/img/trans.png)
[英]R: How to apply a function that outputs a dataframe for multiple columns (using dplyr)?
[英]how to aggregate multiple columns of a dataframe with dplyr
具有列ID,列類別,列成本和列顏色的數據框。
這是數據幀df
library(dplyr)
id <- c(1, 1, 1, 2, 2, 3, 1)
category <- (c("V", "V", "V", "W", "W", "W", "W"))
cost <- c(10, 15, 5, 2, 14, 20, 3)
colour <- c("red", "green", "red", "green", "blue","blue","blue")
df <- data.frame(id, category, cost, colour)
df$category <- as.character(df$category)
df
id category cost colour
1 V 10 red
1 V 15 green
1 V 5 red
2 W 2 green
2 W 14 blue
3 W 20 blue
1 W 3 blue
這是df的格式
'data.frame': 7 obs. of 4 variables:
$ id : num 1 1 1 2 2 3 1
$ category : chr "V" "V" "V" "W" ...
$ cost: num 10 15 5 2 14 20 3
$ colour : Factor w/ 3 levels "blue","green",..: 3 2 3 2 1 1 1
我想有一個新的數據框df_new,對於每個id,其頻率(freq),條目等於W的類別條目的數量(category_W),條目等於V的類別條目的數量(category_V),類別條目為W(cost_W)的每個id的總成本,類別條目為V(cost_V)的每個id的總成本,對於每個唯一ID,每個顏色條目的數量(col_red,col_green,col_blue)。 輸出應該看起來像
id freq category_W category_V cost_W cost_V col_red col_green col_blue
1 4 1 3 3 30 2 1 1
2 2 2 16 1 1
3 1 1 20 1
我嘗試了以下方法-但不起作用。
df_new <- group_by(df, id) %>% summarize(freq = count(id), category_W = count(category == "W", na.rm=TRUE), category_V = count(category == "V", na.rm=TRUE), col_red = count(colour == "red", na.rm=TRUE), col_green = count(colour == "green", na.rm=TRUE), col_blue = count(colour == "blue", na.rm=TRUE))
我不知道如何為cost_W和cost_V插入條件。 我收到錯誤消息:length(rows)== 1不是TRUE非常感謝!
好吧,你快到了。
您可以利用以下事實:在算術運算中邏輯值被轉換為0和1。 因此,當您對它們求和時,將得到邏輯子句測試的特定值的計數。
您可以使用相同的屬性來計算成本。 只需將邏輯子句與cost變量相乘即可。 如果類別符合您的興趣,則將其相加,否則將其減少為0
df_new <-
group_by(df, id) %>% summarize(
freq = n(),
category_W = sum(category == "W", na.rm = TRUE),
category_V = sum(category == "V", na.rm = TRUE),
cost_W = sum((category == "W") * cost, na.rm = TRUE),
cost_V = sum((category == "V") * cost, na.rm = TRUE),
col_red = sum(colour == "red", na.rm = TRUE),
col_green = sum(colour == "green", na.rm = TRUE),
col_blue = sum(colour == "blue", na.rm = TRUE)
)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.