我正在研究这个数据框:
Col0 <- c("AA","BB","CC","DD","EE","FF")
Col1 <- c(2,4,2,6,1,1)
Col2 <- c(3,3,2,1,3,4)
Col3 <- c(2,2,3,4,6,6)
Col4 <- c(1,3,3,1,2,1)
Col5 <- c(2,1,1,1,1,4)
Col6 <- c(2,4,2,5,4,4)
Col7 <- c(3,3,2,1,0,9)
Col8 <- c(2,2,3,4,5,4)
Col9 <- c(1,3,3,2,2,2)
df <- data.frame(Col0,Col1,Col2,Col3,Col4,Col5,Col6,Col7,Col8,Col9)
将在函数中调用,将向其传递属于Col0的值字符串。 我需要创建一个新的df,其中行是从开头提取的值:
f<- function(dataframe, stringval){
listval<- strsplit(stringval,"-") [[1]]
row1<- dataframe[dataframe[1]==listval[[1]],]
row2<- dataframe[dataframe[1]==listval[[2]],]
row3<- dataframe[dataframe[1]==listval[[3]],]
finaldf<- rbind(row1,row2,row3)
return(finaldf)
}
fmatr<- f(df,"AA-CC-DD")
问题是stringval,在这种情况下具有维度3,可以是任何维度,我不知道如何推广公式并使其可用于任何输入维度。 谢谢你的帮助
答案 0 :(得分:0)
我认为您可以简化您的功能,同时使其在stringval
的长度方面更加灵活。
f1 <- function(dataframe, stringval) {
ids <- unlist(strsplit(stringval, "-")) # Create vector of letters
finaldf <- dataframe[dataframe[,1] %in% ids,] # Use them to subset 1st col
return(finaldf)
}
# For example:
f1(df, "AA-CC-FF-EE")
# Col0 Col1 Col2 Col3 Col4 Col5 Col6 Col7 Col8 Col9
#1 AA 2 3 2 1 2 2 3 2 1
#3 CC 2 2 3 3 1 2 2 3 3
#5 EE 1 3 6 2 1 4 0 5 2
#6 FF 1 4 6 1 4 4 9 4 2