在数据上应用函数并在R中获得向量/ df输出?

时间:2017-11-01 16:15:48

标签: r function dictionary dataframe apply

我有以下日期:

var1 <- c("a", "b", "c", "d", "e")

我有一个函数可以为每个var1值分配一个数字分数(0-3)。

    f(a) --> 2
    f(b) --> 1 

etc...

我想使用apply like函数来获取包含2列的数据框: var1和得分:

var1  score
a     1
b     0
c     3
d     3
e     2
f     1

我曾尝试使用vapply和map_dfr,但它不像我所示的那样工作。 请告知如何做到这一点。

P.S

For map_dfr: Error: cannot convert object to a data frame

3 个答案:

答案 0 :(得分:3)

从akrun的解决方案中获得帮助,这更简单

f <- function(x) sample(0:3, 1)
var1 <- c("a", "b", "c", "d", "e")

data.frame(cbind(Var1 = var1, Score = lapply(var1,f)))

  Var1 Score
1    a     0
2    b     2
3    c     0
4    d     1
5    e     3

答案 1 :(得分:2)

将矢量转换为data.frame,然后使用sapply创建新矢量。

df1 <- as.data.frame(var1)
df1$test <- sapply(df1$var1, function(x) if (x=="a") 1 else 0) 


  var1 test
1    a    1
2    b    0
3    c    0
4    d    0
5    e    0

 str(df1)
'data.frame':   5 obs. of  2 variables:
 $ var1: Factor w/ 5 levels "a","b","c","d",..: 1 2 3 4 5
 $ test: num  1 0 0 0 0

答案 2 :(得分:2)

我们可以遍历vector('var1')应用函数(f)来获取list vector,设置vector的名称1}}使用'var1'并使用stack将其转换为2列data.frame

stack(setNames(lapply(var1, f), var1))[2:1]

默认情况下,stack会将列名称返回为“ind”和“values”。我们可以将其更改为“var1”和“score”

setNames(stack(setNames(lapply(var1, f), var1))[2:1], c('var1', 'score'))

数据

f <- function(x) sample(0:3, 1)
var1 <- c("a", "b", "c", "d", "e")