R:类似于apply的函数返回一个数据框?

kut*_*kem 6 r dataframe

我想将一个函数应用于数据帧的每一行.使用apply,结果本身不再是数据框,它看起来更像是列表或矩阵?(我不知道足够的R能够从输出中得知,只是它不是数据帧)

哪个是用于将函数应用于数据帧的每一行,返回新数据帧的正确函数?

我想要应用于每一行的功能:

map_uri <- function(request){
    ret <- request
    uri_stem <- uri_map[uri_map[,1] == request["cs-uri-query"],2]
    if(length(uri_stem) > 0){
        ret <- request
        ret["cs-uri-stem"] <- uri_stem
        ret["cs-uri-query"] <- "-"
    }
    if(request["cs-uri-stem"] == "/index.html"){
        ret["cs-uri-stem"] = "/"
    }

    return(ret)

}
Run Code Online (Sandbox Code Playgroud)

我在想什么:

cleansed <- apply(requests, 1, map_uri)
cleansed[,c("cs-uri-query", "cs-uri-stem")]
Run Code Online (Sandbox Code Playgroud)

这给了我错误

Fehler in cleansed [,c("cs-uri-stem","cs-uri-query")]:IndizierungaußerhalbderGrenzen

(指数超出界限)

由于某种原因,结构的变化使得上面的索引错误.

[编辑]

数据使这成为一个工作的例子:

uri_map.tsv http://pastebin.com/XhUuTMqA

uri_map <- read.table("http://pastebin.com/raw/XhUuTMqA", sep="\t", header=FALSE)
Run Code Online (Sandbox Code Playgroud)

并为转换函数输入数据:

http://pastebin.com/b7ja4rKn

请求< - read.table(" http://pastebin.com/raw/b7ja4rKn ",sep ="",header = TRUE)

Vin*_*mme 19

可以使用申请家庭但是,你是对的,结果是a matrixdata.frame.虽然要回到一个不是什么大不了的事data.frame.

你的函数需要在列之间返回一致的东西(原始iris而不是在iris[, 1:4]下面不起作用,因为iris$Species这是一个具有3个级别的因子,其中summary返回6来自数字列的数字),并且这是可重现的有用的地方.下面,我使用irissummary:

  1. 申请: as.data.frame(apply(iris[, 1:4], 2, summary))
  2. sapply: as.data.frame(sapply(iris[, 1:4], summary))
  3. lapply:do.call(cbind, lapply(iris[, 1:4], summary))

  • 正是我的队长 (2认同)