1
请考虑下面的数据帧传递根据数据帧的子集的功能以及数据帧列R键sapply
#build sample data.frame
theData <- data.frame(surname = c("Smith","Parker", "Allen", "McGraw", "Parker", "Smith", "Smith"),
FamilySize = c(3, 2, 1, 1, 2, 3, 3))
首先,我需要验证的人共享同一姓氏的数量对应到他们所属的家庭的大小。例如,有3个人使用surname = "Smith"
,而FamilySize
变量为3。如果满足这个条件,则家族的大小被附加到姓氏上(例如"3Smith"
)。如果不是,结果应该是"small"
这个词。
为此我写了这个功能:
# function
familyKount <- function(df, lastName, famSize){
# calculate number of persons sharing same surname
nPersons <- dim(subset(df, surname == lastName))[1]
# number of persons agrees with family size
if(nPersons == famSize) {
idFam <- paste(as.character(famSize), lastName, sep="")
} else { # number of persons does not agree with family size
idFam <- "small"
}
idFam
}
所以,如果我调用这个函数如下
familyKount(theData, theData$surname[1], theData$FamilySize[1])
我得到正确的答案:"3Smith"
。
但是,我想要的是将此函数应用于整个数据帧,而无需为surname
和FamilySize
(我不想使用for
循环)指定索引。我尝试过apply
系列函数的变体,但我还没有想出如何在这种情况下传递整个数据框以及它的特定列作为函数的参数。
干杯