我正在尝试使用数据框中的每一行作为函数的输入来处理某些数据,然后将输出写入csv文件。根据以下示例
myfunction <- function(X, Y, Z){
data <- read.csv("mydata.csv")
subsetedData <- subset(data, x=X & y=Y & z=Z, select=x:z)
write.csv(subsetedData, file="mycsvfile.csv")
}
apply(myXYZdata, MARGIN = 1, function(x1, x2, x3) myfunction(X, Y, Z))
我想根据数据框myXYZdata中的每一行进行子集化。但是,这似乎不起作用,或者我不完全理解apply的正确用法。
我知道这可以使用循环来完成,但不希望这样做。
编辑:
这样做的目的是我有一个大型数据文件,我希望根据我的数据框中找到的变量组合进行分组&#34; myXYZdata&#34;并将结果存储在新的数据文件中。
我想要子集的大数据文件格式为。
date x y z count
1 2015-08-20 00:00:00.000 a d h 56
2 2015-08-26 00:00:00.000 b e h 4
3 2015-08-18 00:00:00.000 b f i 8
4 2015-09-03 00:00:00.000 c e l 32
5 2015-08-12 00:00:00.000 a g l 3
答案 0 :(得分:2)
我相信将一行作为参数传递给你的函数会更容易。
myfunction <- function(row){
data <- read.csv("mydata.csv")
subsetedData <- subset(data, x=row[1] & y=row[2] & z=row[3], select=x:z)
write.csv(subsetedData, file="mycsvfile.csv")
}
apply(myXYZdata[,c("X","Y","Z")], MARGIN = 1, myfunction)
答案 1 :(得分:1)
使用mapply
(多变量应用)怎么样:
mapply(myfunction, myXYZdata$X, myXYZdata$Y, myXYZdata$Z, fnms)
您需要创建一个文件名向量(fnms
),以便将每个条目写入另一个文件,然后更改myfunction
,以便它接受文件名的参数。 / p>
或者将append = TRUE
作为write.csv
中的myfunction
的参数,将其全部写入同一文件(但请注意,连续运行的代码不会覆盖文件 - 您可以在write.csv(..., append = TRUE)
之前加if(file.exists("mycsvfile.csv")) file.remove("mycsvfile.csv")
)。