簡體   English   中英

在數據上應用函數並在R中獲得向量/ df輸出?

[英]Apply function on data and get vector/df output in R?

我有以下日期:

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

我有一個函數,為每個var1值分配一個數字分數(0-3)。

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

etc...

我想使用apply like函數來獲取一個包含2列的數據框:var1和score:

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

我曾嘗試使用vapply和map_dfr,但它不像我所示的那樣工作。 請告知如何做到這一點。

PS

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

從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

將矢量轉換為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

我們可以通過循環vector (“VAR1”)應用功能( f )得到一個listvector ,設定的名字vector與“VAR1”和使用stack將其轉換為一個2列data.frame

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

默認情況下, stack將列名稱返回為“ind”和“values”。 我們可以將其更改為'var1'和'得分'

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")

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM