繁体   English   中英

R:在特定列上应用功能,保留其余数据框

[英]R: Apply function on specific columns preserving the rest of the dataframe

我想学习如何在我的数据框的特定列上应用函数,而不会“排除”我的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行,然后再将旧数据框与新创建的数据框合并以获得一个完整的数据框。 但是我认为必须有一个更好的解决方案。 是不是

如果只想对一或几列进行计算,则可以使用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

以下代码将所需的功能仅应用于您指定的列。 作为可重现的示例,我将创建一个简单的数据框。

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

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

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

或创建自己的

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM