簡體   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