R:使用apply两个data.frames
问题描述:
我想使用apply而不是for循环。问题是,我的for-loop使用两个data.frames作为输入。例如:R:使用apply两个data.frames
x <- data.frame(col1=c(1,NA,3,NA), col2=c(9,NA,11,12))
y <- data.frame(col1=c(1,2,3,4), col2=c(5,6,7,8))
output <- rep(NA,2)
for(i in 1:2)
{
output[i] <- sum(is.na(x[,i]))+sum(y[,i])
}
这里的结果是正确的c(12,27)。
但如果我尝试的功能和应用:
test <- function(vector1,vector2) sum(is.na(vector1))+sum(vector2)
apply(x,y,MARGIN=2,FUN=test)
随着应用的结果是C(38,37)。 我该如何解决这个问题?
答
可以mapply使用,而不是适用:当你表现出
x <- data.frame(col1=c(1,NA,3,NA), col2=c(9,NA,11,12))
y <- data.frame(col1=c(1,2,3,4), col2=c(5,6,7,8))
test <- function(vector1,vector2) sum(is.na(vector1))+sum(vector2)
mapply(test, x, y)
# col1 col2
# 12 27
?mapply
+0
谢谢!脉冲总是按列排列? –
+0
'?mapply'告诉你它应用'FUN'(本例中为'test'),其中'x'和'y'的第一个元素作为第一个参数,第二个元素第二个,等等。由于'data.frame's是以列作为元素的列表('is.list(data.frame())'),因此它将逐列显示。 – AdagioMolto
'apply'不能把多个数据集。您可能需要循环遍历列,然后应用函数,即'sapply(seq_along(x),function(i)sum(is.na(x [,i]))+ sum(y [,i])) ' – akrun