簡體   English   中英

如何調用列表元素來計算新的 data.frame 列

[英]How to call list elements for calculation of a new data.frame column

給定一個分組的data.frame和一個包含引用每個組的另一個特征的總數的list (第 1 組為 70,第 2 組為 90):

group <- c(1,1,1,1,2,2,2,2,2)
n<- c(2,4,10,2,4,5,2,8,9)  
df <- data.frame(group, n) %>%
  group_by(group)

mylist <- list(70, 90)

如何向data.frame添加一個新列,以反映n/mylist[[i]]*100給出的各個組的mylist中每個n的比例?

我考慮過使用map_dbl來遍歷列表元素,但是,我無法理解如何在mutate中調用這些命令(類似於df %>% mutate ("Percent" = n / map_dbl (mylist, .)*100) ) 進行百分比計算,最終使它看起來像這樣:

df$percent %>% c (2.9, 5.7, 14.3, 2.9, 4.4, 5.6, 2.2., 8.9, 10.0)
df

調用list元素以將它們包含在計算中的優雅方法是什么?

也許這

df %>% mutate(p = n/map_dbl(group, ~mylist[[.]]) * 100)

基本上,映射組以拉出 mylist 的選定元素。

您也可以考慮使用聯接。

我知道它不使用purrr ,但是rowwise()怎么樣?

library(dplyr)
df %>%
  rowwise %>%
  mutate(percent = n / mylist[[group]] * 100)
## A tibble: 9 x 3
#  group     n percent
#  <dbl> <dbl>   <dbl>
#1     1     2    2.86
#2     1     4    5.71
#3     1    10   14.3 
#4     1     2    2.86
#5     2     4    4.44
#6     2     5    5.56
#7     2     2    2.22
#8     2     8    8.89
#9     2     9   10   

您可以首先將列表數據表示為 data.frame 以使其更易於使用。

library(dplyr)
library(data.table)
group <- c(1,1,1,1,2,2,2,2,2)
n<- c(2,4,10,2,4,5,2,8,9)  
df <- data.frame(group, n) %>%
  group_by(group)

setDT(df)

mylist <- data.table(
  group = c(1 ,2), 
  other.metric = c(70, 90)
)
dt <- merge(df, mylist, by = "group")
dt[, n_share := n / other.metric * 100]
dt

暫無
暫無

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

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