2017-04-10 46 views
0

我是新手R程序員。我想知道如何在數據框上跳動,但避開某些列。如何在選擇列上拉皮()? - R

# Some dummy dataframe 
df <- data.frame(
     grp = c("A", "B", "C", "D"), 
     trial = as.factor(c(1,1,2,2)), 
     mean = as.factor(c(44,33,22,11)), 
     sd = as.factor(c(3,4,1,.5))) 

df <- lapply(df, function (x) {as.numeric(as.character(x))}) 

但是,我使用的方法通過強制引入了NAs。

是否會在數據幀上選擇(或取消選擇)lapply,同時保持數據幀的完整性?

換句話說,是否有辦法將mean和sd轉換爲數字? (一般形式)

謝謝

+0

'庫(tidyverse); df%>%mutate_at(2:4,parse_number)' – alistaire

回答

2

試着這樣做:

df[,3:4] <- lapply(df[,3:4], function (x) {as.numeric(as.character(x))}) 

你只是傳遞函數來指定列。你也可以提供一個條件來選擇你的列的子集,比如排除你不想投的列。

col = names(df)[names(df)!=c("grp","trial")] 
df[,col] <- lapply(df[,col], function (x) {as.numeric(as.character(x))}) 
+0

啊好的。如果這些專欄奇怪地放置,這會很重要嗎? –

+1

只需選擇你想要的任何列,例如df [,c(2,4)],如果這些是需要類型轉換的。 – Divi

+0

ahh kk謝謝 –

1

以及您可能已經猜到了,有很多種方法。由於你似乎在做替換,實際上,for循環將是合適的。

df <- data.frame(
     grp = c("A", "B", "C", "D"), 
     trial = as.factor(c(1,1,2,2)), 
     mean = as.factor(c(44,33,22,11)), 
     sd = as.factor(c(3,4,1,.5))) 

my_cols <- c("trial", "mean", "sd") 
for(mc in my_cols) { 
    df[[mc]] <- as.numeric(as.character(df[[mc]])) 
} 
+0

這很有道理。有沒有辦法說'除了x'之外的所有列都這麼做? –

1

如果你想通過列名選擇性轉換:

library(dplyr) 
df %>% 
    mutate_if(names(.) %in% c("mean", "sd"), 
      function(x) as.numeric(as.character(x)))