2017-08-07 35 views
0

我有R以下醜陋的代碼,我只想簡化,以便代碼更實用,佔用更少的線。這只是一遍又一遍地運行相同的命令。如何簡化R中的代碼?

x$Avg..session.duration..seconds.<- 
as.numeric(x$Avg..session.duration..seconds.) 
x$All.conv..value...cost<- as.numeric(x$All.conv..value...cost) 
x$All.conv..value <- as.numeric(x$All.conv..value) 
x$Interactions<- as.numeric(x$Interactions) 
x$Views<- as.numeric(x$Views) 
x$Total.cost<- as.numeric(x$Total.cost) 
x$Avg..CPM<- as.numeric(x$Avg..CPM) 
x$Cost<- as.numeric(x$Cost) 
x$Impressions <- as.numeric(x$Impressions) 
x$Clicks<- as.numeric(x$Clicks) 
x$Bounce.rate <- as.numeric(x$Clicks) 

謝謝

回答

5

如果沒有內是一個因素:

x[] <- lapply(x, as.numeric)) 

如果你有因素,您需要與as.character先轉換:

x[] <- lapply(x, function(y) as.numeric(as.character(y))) 

如果您不想就地轉換,請使用包裝lapply表達式。

1

你將要遵循的一般模式是

  1. 確定了需要改變的列。
  2. 使用lapply

如果你只是要轉換的字符值,你可以使用

# Identify character values (all character values) 
to_num <- vapply(X, is.character, logical(1)) 

X[to_num] <- lapply(X[to_num], as.numeric) 

如果只有字符值的一個非常具體的名單進行轉換,這樣的事情會工作。

to_num <- c("Avg..session.duration..seconds.", 
      "All.conv..value...cost", 
      "All.conv..value", 
      "Interactions", 
      "Views") 
X[to_num] <- lapply(X[to_num], as.numeric) 

如果你有字符和因素的混合物,馬修的回答運作良好。