获取所有列名的方法,计算每个列名出现的频率,以及每个列名出现在 R 中的多个数据集中的数据帧?

Way to get all column names, count of how often each column name appears, and in which dataframe(s) each appears across multiple datasets in R?

提问人:sdS 提问时间:6/22/2022 最后编辑:user438383sdS 更新时间:6/22/2022 访问量:52

问:

我正在处理来自不同年份的多个调查回复数据集。如果某个列出现在 1 个以上的数据集中,则它将具有相同的名称。这是我正在寻找的一个例子。假设这些是我的数据集的列名(为简洁起见,此处使用 3)

d1 <- colnames(f2018) <- c("Institution", "Department", "Complete",
"effective_goals", "recs_open", "mostvaluable_open", "learningdifferences_l",
"studentmotivation_l")

d2 <- colnames(sum2015) <- c("Institution", "Department", "Complete", 
"effective_goals", "recs_open", "effective_tools", "learningdifferences_l")    

d3 <- <- c("Institution","Department", "Complete", 
"effective_goals", "effective_tools", "effective_assessment", "learningscience_freq")  

我的目标是获得一个包含 3 列的结果数据帧 -- 1) 来自所有 3 个数据集的每个列名,列名出现的频率计数(在本例中应为 1-3),(3) 可以找到特定列名的数据帧(例如,d1、d2、d3)。

所以像这样(没有列出 x 的所有列名,但为了给出一个可复制的例子,这里有一个插图)

x <- (c("Institution", "Department", "Complete",
"effective_goals", "recs_open", "mostvaluable_open", "learningdifferences_l",
"studentmotivation_l", "effective_tools")

y<- c("3", "3", "3", "3", "2", "1", "2", "1", "2")

z <- c("d1, d2, d3", "d1, d2, d3", "d1, d2, d3", "d1, d2, d3", "d1, d2", "d1",
"d1, d2", "d1", "d2, d3")
r

评论


答:

2赞 PaulS 6/22/2022 #1

一个可能的解决方案:

library(tidyverse)

data.frame(x = unique(c(d1, d2, d3))) %>% 
  mutate(
    apply(., 1, \(x) c(d1 = x %in% d1, d2 = x %in% d2, d3 = x %in% d3)) %>%
       t %>% as.data.frame,
    z = rowSums(across(-x)),
    across(c(-x,-z), ~ ifelse(.x, cur_column(), NA))) %>% 
  rowwise() %>% 
  mutate(y = c_across(d1:d3) %>%  na.omit %>%  str_c(collapse = ", ")) %>% 
  select(x, y, z) %>% 
  ungroup

#> # A tibble: 11 × 3
#>    x                     y              z
#>    <chr>                 <chr>      <dbl>
#>  1 Institution           d1, d2, d3     3
#>  2 Department            d1, d2, d3     3
#>  3 Complete              d1, d2, d3     3
#>  4 effective_goals       d1, d2, d3     3
#>  5 recs_open             d1, d2         2
#>  6 mostvaluable_open     d1             1
#>  7 learningdifferences_l d1, d2         2
#>  8 studentmotivation_l   d1             1
#>  9 effective_tools       d2, d3         2
#> 10 effective_assessment  d3             1
#> 11 learningscience_freq  d3             1

评论

1赞 PaulS 6/22/2022
@SdS,不平等不应该成为问题。我猜你正在定义 ,但不正确,因为你将字符串向量分配给 colnames,然后将这些 colnames 分配给 和 ...d1d2d3d1d2d3