如何应用函数返回data.frames与因子序列

Jer*_*Who 10 r dataframe

如何应用将带有因子的data.frame返回到序列的函数?

例:

s <- factor(c(10, 20, 30))
t <- factor(c("a", "b", "a"))
v <- c(5, 6, 4)

df <- data.frame(s,t,v)
Run Code Online (Sandbox Code Playgroud)

所以data.frame df是这样的:

   s t v
1 10 a 5
2 20 b 6
3 30 a 4
Run Code Online (Sandbox Code Playgroud)

我还有一个返回data.frame的函数:

simpleFunc2 <- function(df, x){
  tmp <- subset(df, df$s == x)
  return(tmp)
}
Run Code Online (Sandbox Code Playgroud)

现在我有一个序列

x <- c(20, 30, 10, 30, 10)
Run Code Online (Sandbox Code Playgroud)

并希望结果auf将函数simpleFunc2应用于此序列.

我用sapply

sapply(x, function(x) simpleFunc2(df, x))
Run Code Online (Sandbox Code Playgroud)

但我明白了

  [,1]     [,2]     [,3]     [,4]     [,5]    
s factor,1 factor,1 factor,1 factor,1 factor,1
t factor,1 factor,1 factor,1 factor,1 factor,1
v 6        4        5        4        5  
Run Code Online (Sandbox Code Playgroud)

如何获得正确的因素值?

这个例子很简单.所以在这种情况下可能有一种更简单的方法.

Tyl*_*ker 17

请尝试lapply改为do.call:

do.call(rbind, lapply(x, function(x) simpleFunc2(df=df, x)))
Run Code Online (Sandbox Code Playgroud)


42-*_*42- 5

我看到你已经得到了你的问题的答案,但我认为你从这个数据框中选择超集的方法过于复杂.(如果该功能不具代表性,我表示道歉.我想提供一种比通过更快的提取方法subset:

> df[ match(x, df$s), ]
     s t v
2   20 b 6
3   30 a 4
1   10 a 5
3.1 30 a 4
1.1 10 a 5
# Save results as from:
> do.call(rbind, lapply(x, function(x) simpleFunc2(df, x)) )
    s t v
2  20 b 6
3  30 a 4
31 10 a 5
32 30 a 4
5  10 a 5
Run Code Online (Sandbox Code Playgroud)