[英]How do I create many variables, that depend on multiple conditions in R (akin to the array-function in SAS)
[英]How do I discern which variables depend on grouping variable?
我想找到在一個組中具有多個值的變量——即依賴於(或不依賴於)分組變量的變量。
換句話說,例如 dataframe 的信息要么
(1) 取決於公司(例如“行業”)或
(2) 取決於公司年份(例如“年銷售額”),
我希望能夠辨別哪些變量屬於 (1) 類型,哪些屬於 (2) 類型。
sample_df <-
data.frame(
year = rep(2013:2015, 3),
firm = rep(c("Disney", "Netflix", "Hulu"), each = 3),
infoA = c(rep(1, 6), rep(2, 3)),
infoB = c(c(1:3), rep(2, 6)),
infoC = rep(3:1, each = 3)
)
# year firm infoA infoB infoC
# 2013 Disney 1 1 3
# 2014 Disney 1 2 3
# 2015 Disney 1 3 3
# 2013 Netflix 1 2 2
# 2014 Netflix 1 2 2
# 2015 Netflix 1 2 2
# 2013 Hulu 2 2 1
# 2014 Hulu 2 2 1
# 2015 Hulu 2 2 1
如果分組變量是“公司”,
(1) 'infoA' 和 'infoC' 列在每個組中沒有變化,
(2) 雖然“year”和“infoB”在每個組中會有所不同,
在具有許多列的環境中實現這種划分的最簡單方法是什么?
按您的 groupnig 變量分組並計算不同項目的數量,如果它們都相同則返回 0 否則返回 1
res=aggregate(
subset(sample_df,select=-c(firm)),
list(sample_df$firm),
function(x){
if (length(table(x))==1){
0
} else {
1
}
}
)
Group.1 year infoA infoB infoC
1 Disney 1 0 1 0
2 Hulu 1 0 0 0
3 Netflix 1 0 0 0
要找出哪些列與分組變量不同,只需按列求和
colSums(subset(res,select=-c(Group.1)))==0
year infoA infoB infoC
FALSE TRUE FALSE TRUE
我們可以寫一個 function 來計算每組唯一值的數量。 如果值有變化,我們返回TRUE
或FALSE
。
library(dplyr)
check_dependability <- function(data, col1, col2 = NULL) {
data %>%
group_by({{col1}}, {{col2}}) %>%
summarise(across(.fns = ~n_distinct(.) > 1))
}
check_dependability(sample_df, firm)
# firm year infoA infoB infoC
# <chr> <lgl> <lgl> <lgl> <lgl>
#1 Disney TRUE FALSE TRUE FALSE
#2 Hulu TRUE FALSE FALSE FALSE
#3 Netflix TRUE FALSE FALSE FALSE
check_dependability(sample_df, firm, year)
# firm year infoA infoB infoC
# <chr> <int> <lgl> <lgl> <lgl>
#1 Disney 2013 FALSE FALSE FALSE
#2 Disney 2014 FALSE FALSE FALSE
#3 Disney 2015 FALSE FALSE FALSE
#4 Hulu 2013 FALSE FALSE FALSE
#5 Hulu 2014 FALSE FALSE FALSE
#6 Hulu 2015 FALSE FALSE FALSE
#7 Netflix 2013 FALSE FALSE FALSE
#8 Netflix 2014 FALSE FALSE FALSE
#9 Netflix 2015 FALSE FALSE FALSE
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.