2016-12-07 54 views
1

我有一個數據框有2列,第一個是ID號,第二個是數字列表。我定義了一個函數來總結列表並添加2.我想要做的是對所有行進行計算而不使用for循環。我嘗試使用申請,但我不能讓它工作...將函數應用於數據框的列(列是列表)

下面的代碼:

測試數據幀:

d1 <- c(1,2,3,4,5) 
d2 <- c(4,6,8) 
d3 <- c(5,10) 

df1 <- data.frame(cbind(1, I(list(d1)))) 
df2 <- data.frame(cbind(2, I(list(d2)))) 
df3 <- data.frame(cbind(3, I(list(d3)))) 
df <- rbind(df1, df2, df3) 

定義的函數SUM2:

sum2 <- function(a) 
{ 
    sum(unlist(a)) + 2 
} 

如何使用apply並將第三列添加到包含計算值的df中?

謝謝!

+0

你爲什麼喜歡' sapply'在循環?他們都是一個循環。除非你想要一個更清晰的語法? –

+0

我認爲我更高效地做它...有沒有更好的方法來做到這一點? – jormaga

+0

現在想不到一個,對不起。如果'X2'包含字符串,例如''4,6,8''而不是列表,你可以很容易地將這個矢量化,但是我不確定如何矢量化你的特定格式。 –

回答

4

以下工作爲你的榜樣

sapply(df[,2], function(x) sum(x)+2) 
1

我們可以使用sapply

df$NewCol <- sapply(df$X2, function(x) sum(x) + 2) 

或者使用OP的功能,但unlist不需要

sapply(df$X2, sum2) 
+1

非常感謝!!! :) – jormaga

相關問題