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
系列函數的變體,但我還沒有想出如何在這種情況下傳遞整個數據框以及它的特定列作爲函數的參數。
乾杯