2012-11-15 33 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()与目标列所需的功能列。

相关问题