R:在特定列上应用函数,保留数据帧的其余部分

时间:2012-11-15 13:00:06

标签: r dataframe sapply

我想学习如何在我的数据帧的特定列上应用函数而不用#34;排除"来自我的df的其他列。例如,我希望将某些特定列乘以1000,并将其他列保持原样。

使用sapply函数,例如:

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

我得到新的数据帧,第一列乘以1000,但没有我在操作中没有使用的其他列。所以我的尝试就是这样做:

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

但是这个没有用。

我的解决方法是为两个数据帧提供另一行ID,然后将旧数据框与新创建的数据框合并以获得完整的数据帧。但我认为必须有更好的解决方案。不是吗?

3 个答案:

答案 0 :(得分: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

答案 1 :(得分: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()

答案 2 :(得分:0)

dplyr中,我们将使用mutate_at,在其中您可以选择或排除特定变量(通过在变量名前加上“-”减号)。 您可以只命名一个函数

df <- df %>% mutate_at(vars(columnA), scale)

或创建自己的

df <- df %>% mutate_at(vars(columnA, columnC), function(x) {do this})