gpt4 book ai didi

r - 计算 EXCEL 2010 或 R 中一列中的唯一值,有 100 万行

转载 作者:行者123 更新时间:2023-12-04 21:39:00 26 4
gpt4 key购买 nike

搜索论坛后,我没有找到这个问题的好解决方案。如果我错过了,请告诉我。

我需要计算 EXCEL 2010 中一列中的唯一值。

该工作表有 100 万行和 10 列。所有单元格值都是字符串或数字。

我使用了 Count unique values in a column in Excel 的解决方案

 =SUMPRODUCT((A2:A1000000<>"")/COUNTIF(A2:A100000,A2:A1000000&""))

但是,运行时间太长,EXCEL 几乎被卡住。并且,它在 Win 7 中生成 25 个进程。

有没有更有效的方法来做到这一点?

此外,在该列中,所有值的格式为
  AX_Y

here, A is a character, X is an integer, Y is an integer from 1 to 10.

For example, A5389579_10

我需要在(包括)undersocre 之后切断部分。例如,
  A5389579

这就是我需要将其视为一列中所有单元格中的唯一值。
  For example, A5389579_10
A1543848_6
A5389579_8

这里,删除下划线后的部分后,唯一值有 2。

如何在 EXCEL VBA 和 R 中做到这一点(如果 EXCEL 没有有效的解决方案)?

最佳答案

如果您想通过 VBA 执行此操作,您可以利用 Collection目的。由于集合只能包含唯一值,因此尝试将所有输入数据添加到集合中会产生唯一值数组。下面的代码获取选定范围内的所有变量,然后将具有不同值的数组输出到另一个工作表(在本例中为名为 Output 的工作表)。

Sub ReturnDistinct()
Dim Cell As Range
Dim i As Integer
Dim DistCol As New Collection
Dim DistArr()
Dim OutSht As Worksheet
Dim LookupVal As String

Set OutSht = ActiveWorkbook.Sheets("Output") '<~~ Define sheet to putput array

If TypeName(Selection) <> "Range" Then Exit Sub

'Add all distinct values to collection
For Each Cell In Selection
If InStr(Cell.Value, "_") > 0 Then
LookupVal = Mid(Cell.Value, 1, InStr(Cell.Value, "_") - 1)
Else
LookupVal = Cell.Value
End If
On Error Resume Next
DistCol.Add LookupVal, CStr(LookupVal)
On Error GoTo 0
Next Cell

'Write collection to array
ReDim DistArr(1 To DistCol.Count, 1 To 1)
For i = 1 To DistCol.Count Step 1
DistArr(i, 1) = DistCol.Item(i)
Next i

'Outputs distinct values
OutSht.Range("A1:A" & UBound(DistArr)).Value = DistArr
End Sub

请注意,由于此代码将所有不同的值写入 OutSht 中的单个列。 -sheet,如果数据集中有超过 1,048,576 个不同的值,这将返回错误。在这种情况下,您必须将要填充的数据拆分为多个输出列。

关于r - 计算 EXCEL 2010 或 R 中一列中的唯一值,有 100 万行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23035511/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com