我有一个非常大的数据集,包括250个字符串和数字变量。我想一个接一个地比较一下。例如,我将比较(差异)第一个变量与第二个变量,第三个变量与第四个变量,第五个变量与第六个变量等等。 例如(数据集的结构类似于此示例),我想将number.x与number.y,day.x与day.y,school.x与school.y等进行比较。
number.x<-c(1,2,3,4,5,6,7)
number.y<-c(3,4,5,6,1,2,7)
day.x<-c(1,3,4,5,6,7,8)
day.y<-c(4,5,6,7,8,7,8)
school.x<-c("a","b","b","c","n","f","h")
school.y<-c("a","b","b","c","m","g","h")
city.x<- c(1,2,3,7,5,8,7)
city.y<- c(1,2,3,5,5,7,7)
答案 0 :(得分:1)
你的意思是,这样的事情?
> number.x == number.y
[1] FALSE FALSE FALSE FALSE FALSE FALSE TRUE
> length(which(number.x==number.y))
[1] 1
> school.x == school.y
[1] TRUE TRUE TRUE TRUE FALSE FALSE TRUE
> test.day <- day.x == day.y
> test.day
[1] FALSE FALSE FALSE FALSE FALSE TRUE TRUE
编辑:根据上面的示例变量,我们有:
df <- data.frame(number.x,
number.y,
day.x,
day.y,
school.x,
school.y,
city.x,
city.y,
stringsAsFactors=FALSE)
n <- ncol(df) # no of columns (assumed EVEN number)
k <- 1
comp <- list() # comparisons will be stored here
while (k <= n-1) {
l <- (k+1)/2
comp[[l]] <- df[,k] == df[,k+1]
k <- k+2
}
之后,您将拥有:
> comp
[[1]]
[1] FALSE FALSE FALSE FALSE FALSE FALSE TRUE
[[2]]
[1] FALSE FALSE FALSE FALSE FALSE TRUE TRUE
[[3]]
[1] TRUE TRUE TRUE TRUE FALSE FALSE TRUE
[[4]]
[1] TRUE TRUE TRUE FALSE TRUE FALSE TRUE
要获得列k
和k+1
之间的比较结果,请查看(k+1)/2
的{{1}}元素 - 即获得第7列和第7列之间的比较结果。 8,您查看comp
元素comp
:
8/2=4
编辑2 :要将比较作为数据框中的新列进行比较:
> comp[[4]]
[1] TRUE TRUE TRUE FALSE TRUE FALSE TRUE
之后,你有:
new.names <- rep('', n/2)
for (i in 1:(n/2)) {
new.names[i] <- paste0('V', i)
}
cc <- as.data.frame(comp, optional=TRUE)
names(cc) <- new.names
df.new <- cbind(df, cc)