2012-11-15 69 views
8

我想了解如何在我的數據框的特定列上應用函數,而不「排除」我的df中的其他列。例如,我想將某些特定列乘以1000,然後保留其他列。R:在保留數據框其餘部分的特定列上應用函數

使用例如sapply功能是這樣的:

a<-as.data.frame(sapply(table.xy[,1], function(x){x*1000})) 

我得到的第一列乘以1000,但沒有,我沒有在操作中其他列新dataframes。所以我的嘗試是這樣做的:

a<-as.data.frame(sapply(table.xy, function(x) if (colnames=="columnA") {x/1000} else {x})) 

但這一個沒有工作。

我的解決方法是給兩個數據框添加另一行ID,稍後將舊數據框與新創建的數據框合併爲一個完整的數據框。但我認爲必須有更好的解決方案。不是嗎?

回答

6

如果你只想做一個或幾個列的計算,你可以使用transform或者根本指數它手動:

# with transfrom: 
df <- data.frame(A = 1:10, B = 1:10) 
df <- transform(df, A = A*1000) 

# Manually: 
df <- data.frame(A = 1:10, B = 1:10) 
df$A <- df$A * 1000 
+0

是的。這正是我正在尋找的。謝謝!! – Joschi

+0

如果我有很多列(n = 30),我該怎麼做?打字的所有名字將會是太多的工作... – Joschi

+2

你有號碼? 'df [,c(1,2,....)] < - 1000 * df [,c(1,2,....)]' –

0

下面的代碼將應用所需的功能,唯一的列你指定。 我將創建一個簡單的數據框架作爲一個可重複的例子。

(df <- data.frame(x = 1, y = 1:10, z=11:20)) 
(df <- cbind(df[1], apply(df[2:3],2, function(x){x*1000}))) 

基本上,使用cbind()選擇您不想要的功能上運行,然後用apply()與目標列所需的功能列。

相關問題