不在%in%函数中,用于将后缀添加到来自2个其他数据帧的数据帧的列中

时间:2016-12-15 10:55:35

标签: r

我有一个数据框,我需要根据来自其他两个数据框的名称将后缀添加到列名称中,如果它不存在则为“UN”。 数据框看起来像,

head(df)

AE02    AE03    AE04    AE05    AE06    AE07    AE08    AE09    AE10    AE11    AE12
11.9619362364   18.5701402709   42.2010838789   28.0025053738   19.5589170223   18.1459582989   16.5292369479   32.4885640738   34.0342144643   31.6971000153   44.932255488
2.9904840591    3.9793157723    0   0   1.7780833657    1.7281865047    13.7743641233   4.3318085432    0   17.067669239    0
0   0   0   0   2.6671250485    0   4.5914547078    0   0   0   2.1396312137

和其他datafrme

head(phlike)
 V1
AE06
AE08    
AE09
AE12

DMR数据帧是不同长度的相同格式

这是我尝试过的,我创建了一个不在

中的函数
`%notin%` = function(x,y,z) !(x %in% [y & z])

然后我在数据框中调用它,如下所示,

colnames(new)[colnames(new) %notin% Phlike$V1&DMR$V1 ] <- paste0("UN_", colnames(new)[colnames(new) %notin% Phlike$V1&DMR$V1 ])

但它引发了以下错误,

Error in colnames(new) %notin% Phlike$V1 : 
  argument "z" is missing, with no default

任何建议或更好的解决方案都会很棒

3 个答案:

答案 0 :(得分:2)

我们可以否定%in%然后更新匹配列:

# get the index of non-matching (!) columns
ix <- which(!colnames(new) %in% unique(c(Phlike$V1, DMR$V1)))

# then update with prefix
colnames(new)[ix] <- paste0("UN_", colnames(new)[ix])

答案 1 :(得分:2)

我认为您对代码的一个问题是%notin%是三个参数的函数,而您没有传递它。

我的意思是,你需要调用%notin%函数,如下所示:

%notin% (colnames(new), Phlike$V1, DMR$V1)

答案 2 :(得分:0)

根据您的数据框架,我了解您要检查名称来自两个数据框:Phlike$V1&DMR$V1Phlike$V2&DMR$V1

然后你可以做

`%notin%` = function(x,y) !(x %in% y)
names_to_keep <- c(Phlike$V1&DMR$V1, Phlike$V2&DMR$V1)
colnames(new)[colnames(new) %notin% names_to_keep ] <- paste0("UN_", colnames(new)[colnames(new) %notin% names_to_keep ])