如何简化R中的代码?

时间:2017-08-07 16:10:54

标签: 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)

谢谢

2 个答案:

答案 0 :(得分:5)

如果内部没有任何因素:

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

如果您有因素,则需要先使用as.character进行转换:

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

如果您不想就地转换,请使用lapply包装as.data.frame表达式。

答案 1 :(得分:1)

您想要遵循的一般模式是

  1. 确定需要更改的列。
  2. 使用lapply
  3. 如果您只想转换字符值,可以使用

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

    如果你有各种各样的人物和因素,马修的答案很有效。