使用n个元素的列表从数据框中提取行

时间:2016-06-08 12:03:10

标签: r

我正在研究这个数据框:

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,可以是任何维度,我不知道如何推广公式并使其可用于任何输入维度。 谢谢你的帮助

1 个答案:

答案 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