R将重复列标识为组

时间:2018-04-19 18:52:34

标签: r

我有一个数据框,但无法弄清楚如何根据其值对重复列进行分组。如何汇总这些数据,以便我可以将重复列标识为3个不同的组,如下所示: A& C, B& d, E,

 <!DOCTYPE html>
 <html lang="en" >

 <head>
 <meta charset="UTF-8">
 <script src='jquery.min.js'> </script>
 <title>Parsing CSV Files</title>
 <script>

    (function($) {

  //$(document).ready(function() {

 'use strict';

  $.ajax({
  url: 'csv_data.csv',
  dataType: 'text',
  }).done(successFunction);

  function successFunction(data) {
  var allRows = data.split(/\r?\n|\r/);
  var table = '<table>';
  for (var singleRow = 0; singleRow < allRows.length; singleRow++) {
  if (singleRow === 0) {
    table += '<thead>';
    table += '<tr>';
  } else {
    table += '<tr>';
  }
  var rowCells = allRows[singleRow].split(',');
  var a = $('#test').text();
  document.getElementById("test").innerHTML = a;
  for (var rowCell = 0; rowCell < rowCells.length; rowCell++) {
    if (singleRow === 0) {
      table += '<th>';
      table += rowCells[rowCell];
      table += '</th>';
    } else if(rowCells[0]==a){
      table += '<td>';
      table += rowCells[rowCell];
      table += '</td>';
    }
  }
  if (singleRow === 0) {
    table += '</tr>';
    table += '</thead>';
    table += '<tbody>';
    } else {
    table += '</tr>';
   }
  }
  table += '</tbody>';
  table += '</table>';
  $('body').append(table);
  }

  // });

  })(jQuery);
  </script>
  </head>

  <body>
  <pan id="test">2</span>
  </body>

3 个答案:

答案 0 :(得分:0)

使用t()两次并使用unique():

<ul>
    @foreach($resources->sortBy('pivot_order_column') as $resource)
        <li><a href="{{ $resource->url }}">{{ $resource->name }}</a></li>
    @endforeach
</ul>

答案 1 :(得分:0)

从列中创建字符串(sss)的笨重但有效的方法,并在此基础上进行比较:

> library(dplyr)
> library(tibble)
> sss <- data.frame(apply(testframe,2,function(x) paste0(x,collapse=",")))
> names(sss) <- c("pattern")
> sss2 <- sss %>% rownames_to_column()
> lapply(unique(sss2$pattern), function(x) sss2$rowname[which(sss2$pattern==x)]) 
[[1]]
[1] "A" "C"

[[2]]
[1] "B" "D"

[[3]]
[1] "E"

答案 2 :(得分:0)

您可以使用%in%函数检查data.frame中是否存在具有相同值的列

df <- testframe # just to make a name shorter
df %in% df[1]   # df[1] is a data.frame with a single column (not a vector)

TRUE FALSE  TRUE FALSE FALSE

因此,这只是一个问题,即如何遍历每列以及如何用其名称替换与列对应的逻辑值。
我这样做是为了获得具有相同值的列名称组:

unique(lapply(seq(df), function(x) names(df)[df %in% df[x]]))

[[1]]
[1] "A" "C"

[[2]]
[1] "B" "D"

[[3]]
[1] "E"

更大的数据集

由于性能,值得将列及其值编码为哈希值,然后进行比较。为方便起见,将其包装在函数中:

library(digest)

colTwins <- function(df) {
        hash.v <- vapply(df, function(x) digest(x), character(1))
        unique(lapply(seq(df), function(z) names(df)[hash.v %in% hash.v[z]]))
}

colTwins(df = df)

[1] "A" "C"

[[2]]
[1] "B" "D"

[[3]]
[1] "E"