我有2列数据,我想确定并计算不匹配的数量。我用过:
c <-rep ("p*02:01:01:01+p*02:01:02:01", 6)
d <-rep ("p*02:01:02:01+p*02:01:01:01", 6)
y <-data.frame(c,d, stringsAsFactors = F)
y
# c d
# 1 p*02:01:01:01+p*02:01:02:01 p*02:01:02:01+p*02:01:01:01
# 2 p*02:01:01:01+p*02:01:02:01 p*02:01:02:01+p*02:01:01:01
# 3 p*02:01:01:01+p*02:01:02:01 p*02:01:02:01+p*02:01:01:01
# 4 p*02:01:01:01+p*02:01:02:01 p*02:01:02:01+p*02:01:01:01
# 5 p*02:01:01:01+p*02:01:02:01 p*02:01:02:01+p*02:01:01:01
# 6 p*02:01:01:01+p*02:01:02:01 p*02:01:02:01+p*02:01:01:01
y$c == y$d
# [1] FALSE FALSE FALSE FALSE FALSE FALSE
但是对于所有6行输出应该为TRUE,因为我想知道p + 02:01:01:01和p * 02:01:02:01是否存在于c和d列中,我不知道&# 39;如果p * 02:01:01:01或p * 02:01:02:01在加号之前或之后,请小心。
添加了其他示例的数据框。 mapply公式也只适用于数据帧,但不适用于我导入的csv文件。
ý
c d
1 p*02:01:01:01, p*02:01:02:01 p*02:01:02:01, p*02:01:01:01
2 p*02:01:01:01, p*02:01:02:01 p*02:01:02:01, p*02:01:01:01
3 p*02:01:01:01, p*02:01:02:01 p*02:01:02:01, p*02:01:01:01
4 p*02:01:01:01, p*02:01:02:01 p*02:01:02:01, p*02:01:01:01
5 p*02:01:01:01, p*02:01:02:01 p*02:01:02:01, p*02:01:01:01
6 p*02:01:01:01, p*02:01:02:01 p*02:01:02:01, p*02:01:01:01
7 p*02:01:01:01, p*02:01:01:01 p*02:01:01:01, p*02:01:13
8 p*02:134, p*02:01:01:01 p*02:01:01:01, p*02:01:13
9 p*01:01:01:01, p*02:01:01:01 p*01:01:01:01, p*02:01:01:01
答案 0 :(得分:1)
试试这个:
c <-rep ("p*02:01:01:01+p*02:01:02:01", 6)
d <-rep ("p*02:01:02:01+p*02:01:01:01", 6)
y <-data.frame(c,d, stringsAsFactors = F)
y
# c d
# 1 p*02:01:01:01+p*02:01:02:01 p*02:01:02:01+p*02:01:01:01
# 2 p*02:01:01:01+p*02:01:02:01 p*02:01:02:01+p*02:01:01:01
# 3 p*02:01:01:01+p*02:01:02:01 p*02:01:02:01+p*02:01:01:01
# 4 p*02:01:01:01+p*02:01:02:01 p*02:01:02:01+p*02:01:01:01
# 5 p*02:01:01:01+p*02:01:02:01 p*02:01:02:01+p*02:01:01:01
# 6 p*02:01:01:01+p*02:01:02:01 p*02:01:02:01+p*02:01:01:01
# messed row in y per op comment:
y <- rbind(y, data.frame(c = "p*02:01:01:01+p*02:01:01:01",
d = "p*02:01:01:01+p*02:01:13"))
y$c == y$d
library(stringr)
y$c<- stringr::str_split(y$c, "\\+")
y$d<- stringr::str_split(y$d, "\\+")
sapply(seq_along(y$c), function(i) {
setequal(y$c[[i]], y$d[[i]])
})
[1] TRUE TRUE TRUE TRUE TRUE TRUE FALSE
要处理已修改帖子中的数据,我可以提出这个问题。
首先,我重新创建了你的文件:
testFile <- tempfile()
cat("c d
p*02:01:01:01, p*02:01:02:01 p*02:01:02:01, p*02:01:01:01
p*02:01:01:01, p*02:01:02:01 p*02:01:02:01, p*02:01:01:01
p*02:01:01:01, p*02:01:02:01 p*02:01:02:01, p*02:01:01:01
p*02:01:01:01, p*02:01:02:01 p*02:01:02:01, p*02:01:01:01
p*02:01:01:01, p*02:01:02:01 p*02:01:02:01, p*02:01:01:01
p*02:01:01:01, p*02:01:02:01 p*02:01:02:01, p*02:01:01:01
p*02:01:01:01, p*02:01:01:01 p*02:01:01:01, p*02:01:13
p*02:134, p*02:01:01:01 p*02:01:01:01, p*02:01:13
p*01:01:01:01, p*02:01:01:01 p*01:01:01:01, p*02:01:01:01\n",
file = testFile)
y1 <- read.csv(testFile, skip = 1, header = FALSE,
as.is=TRUE)
head(y1)
## V1 V2 V3
## 1 p*02:01:01:01 p*02:01:02:01 p*02:01:02:01 p*02:01:01:01
## 2 p*02:01:01:01 p*02:01:02:01 p*02:01:02:01 p*02:01:01:01
## 3 p*02:01:01:01 p*02:01:02:01 p*02:01:02:01 p*02:01:01:01
## 4 p*02:01:01:01 p*02:01:02:01 p*02:01:02:01 p*02:01:01:01
## 5 p*02:01:01:01 p*02:01:02:01 p*02:01:02:01 p*02:01:01:01
## 6 p*02:01:01:01 p*02:01:02:01 p*02:01:02:01 p*02:01:01:01
首先,我将在向量的开头或结尾消除任何空格:
y1[] <- lapply(y1, str_trim, side="both")
然后拆分中间并将另外两列放入&#34; c&#34;和&#34; d&#34; :
y1$c <- cbind(y1$V1,
str_split_fixed(y1$V2, pattern = " ", n=2)[,1])
y1$d <- cbind(y1$V3,
str_split_fixed(y1$V2, pattern = " ", n=2)[,2])
然后我们将稍微修改原始脚本以在data.frame中使用矩阵:
sapply(seq_along(y1$c[,1]), function(i) {
setequal(y1$c[i,], y1$d[i,])
})
并获得:
## [1] TRUE TRUE TRUE TRUE TRUE TRUE FALSE FALSE TRUE