我有一个看起来像这样的Excel表格:
Col1 Col2
IJ-123 A2B1
IJ-123 A2B1
IJ-456 C2C2
IJ-456 c2c2
IJ-456 D1e2
IJ-789 LJ87
IJ-456
IJ-789 LJ98
x = data.frame(
Col1 = c("IJ-123", "IJ-123", "IJ-456", "IJ-456",
"IJ-456", "IJ-789", "IJ-456", "IJ-789"),
Col2 = c("A2B1", "A2B1", "C2C2", "c2c2",
"D1e2", "LJ87", NA, "LJ98")
)
我希望添加一列并检查(对于每个唯一的Col2值)在Col1中分配的值是TRUE还是FALSE。
输出:
Col1 Col2 Result
IJ-123 A2B1 TRUE
IJ-123 A2B1 TRUE
IJ-456 C2C2 TRUE
IJ-456 c2c2 TRUE
IJ-456 D1e2 FALSE
IJ-789 LJ87 TRUE (Because Col2 count=1 for this value)
IJ-456 C2C2
IJ-789 LJ98 TRUE (Because Col2 count=1 for this value)
逻辑:
- 如果col2中有超过1个相同的值,则检查仅针对这些col2值的相应col1值是否相同
- 如果只有一个col2值,则检查col1是否唯一,但仅与多次出现的col2值的col1值进行比较。
- 在这些字段中,
Col2
中有空白数据,如果我们有重复的Col1
值,则在结果中显示映射到这些Col1
的Col2
值(参见第7行)。
对于此问题,我有一个 excel 公式 =IF(COUNTIF($B$2:$B$8,B2)=1,SUMPRODUCT(--(($A$2:$A$8=A2)*(COUNTIF($B$2:$B$8,$B$2:$B$8))>1))=0,COUNTIFS($B$2:$B$8,B2,$A$2:$A$8,"<>"&A2)=0)
但是它运行非常缓慢,因为等待了约4个小时后,仅完成了 ~20万数据的28%处理。
我已将文件以CSV
格式上传到R,并希望在R上执行相同的操作以实现更快的处理。
Result
列赋值的逻辑,请更好地解释一下。不过放弃 Excel 转向 R 是个好主意。 - Tim Biegeleisen