2015-10-27 23 views
1

我有一個300列的數據框,其中有一個字符串變量,我試圖刪除某處。我發現這個解決方案使用lapply在堆棧溢出(見下文),這是我想要做的,但使用dplyr軟件包。我已經使用了變異每個函數嘗試,但不能似乎讓它工作使用dplyr,刪除數據幀中的所有字符串

「如果你的數據幀(DF)是真的,除了來港,垃圾整數,然後再下面將其轉換

DF2 < - data.frame(lapply(df,function(x)as.numeric(as.character(x))))

您將對強制引入的NAs發出警告,但這只是所有那些非數字字符串旋轉納入NAs

回答

2

如果您想使用此行代碼:

df2 <- data.frame(lapply(df, function(x) as.numeric(as.character(x)))) 

dplyr(由我假設你的意思是 「使用管道」),最簡單的是

df2 = df %>% lapply(function(x) as.numeric(as.character(x))) %>% 
    as.data.frame 

「翻譯」 此爲mutate_each成語:

mutate_each(df, funs(as.numeric(as.character(.))) 

此功能將當然,將所有列轉換爲字符,然後轉換爲數字。爲了提高效率,不要打擾那些已經數字列做兩種轉換:

mutate_each(df, funs({ 
    if (is.numeric(.)) return(.) 
    as.numeric(as.character(.)) 
})) 

數據來進行測試:

df = data.frame(v1 = 1:10, v2 = factor(11:20)) 
+0

感謝,認爲這將工作 – MP61

3

dplyr 0.5現在包括一個select_if()功能。 例如:

person <- c("jim", "john", "harry") 
df <- data.frame(matrix(c(1:9,NA,11,12), nrow=3), person) 

library(dplyr) 
df %>% select_if(is.numeric) 

# X1 X2 X3 X4 
#1 1 4 7 NA 
#2 2 5 8 11 
#3 3 6 9 12 

當然,你可以添加必要的其他條件。

0

mutate_all在這裏工作,並簡單地將gsub包裝在一個函數中。 (我還以爲你不一定串狩獵,這麼多拖網非整數

StrScrub <- function(x) { 
    as.integer(gsub("^\\D+$",NA, x)) 
    } 
ScrubbedDF <- mutate_all(data, funs(StrScrub)) 

示例數據框中:

library(dplyr) 
options(stringsAsFactors = F) 
data = data.frame("A" = c(2:5),"B" = c(5,"gr",3:2), "C" = c("h", 9, "j", "1")) 

參考/幫助從Tony Ladson

相關問題