R 在ddply中使用函数
我在将函数写入ddply调用时遇到问题。以下是一个基本的DF:R 在ddply中使用函数,r,if-statement,plyr,R,If Statement,Plyr,我在将函数写入ddply调用时遇到问题。以下是一个基本的DF: library(plyr) Time <- c(1,2,3,4,5,6,7,8,9,10) X <- c(1,2,-3,4,-7,2,-4,9,7,-5) Y <- c(2,-3,-4,4,4,3,2,-9,9,10) T <- c(5,4,3,2,1,9,8,7,6,5) DF <- data.frame(Time,X,Y,T) 但是这两个函数都有错误,我不确定为什么我认为您需要在函数中返回结果,
library(plyr)
Time <- c(1,2,3,4,5,6,7,8,9,10)
X <- c(1,2,-3,4,-7,2,-4,9,7,-5)
Y <- c(2,-3,-4,4,4,3,2,-9,9,10)
T <- c(5,4,3,2,1,9,8,7,6,5)
DF <- data.frame(Time,X,Y,T)
但是这两个函数都有错误,我不确定为什么我认为您需要在函数中返回结果,即
VD<-function(X,Y,T){
if(X > 0 & Y < 0) {return(9-T)}
if(X < 0 & Y < 0) {return(5-T)}
if(X > 0 & Y > 0) {return(9-T)}
if(X < 0 & Y > 0) {return(5-T)}
}
vd0&Y<0{return(9-T)}
如果(X<0&Y<0){返回(5-T)}
如果(X>0&Y>0){return(9-T)}
如果(X<0&Y>0){return(5-T)}
}
我认为您需要在函数中返回结果,即
VD<-function(X,Y,T){
if(X > 0 & Y < 0) {return(9-T)}
if(X < 0 & Y < 0) {return(5-T)}
if(X > 0 & Y > 0) {return(9-T)}
if(X < 0 & Y > 0) {return(5-T)}
}
vd0&Y<0{return(9-T)}
如果(X<0&Y<0){返回(5-T)}
如果(X>0&Y>0){return(9-T)}
如果(X<0&Y>0){return(5-T)}
}
vd0&Y<0{k=9-T}
如果(X<0&Y<0){k=5-T}
如果(X>0&Y>0){k=9-T}
如果(X<0&Y>0){k=5-T}
返回(k)
}
图书馆(plyr)
ddply(DF,'Time',summary,Result=VD(X,Y,T))
时间结果
1 1 4
2 2 5
3 3 2
4 4 7
5 5 4
6 6 0
7 7 -3
8 8 2
9 9 3
10 10 0
VD2 ddply(DF,'Time',summary,Result2=VD2(X))
时间结果2
1 1 1
2 2 2
3 3 12
4 4 4
5 5 16
6 6 2
7 7 13
8 8 9
9 9 7
10 10 14
vd0&Y<0{k=9-T}
如果(X<0&Y<0){k=5-T}
如果(X>0&Y>0){k=9-T}
如果(X<0&Y>0){k=5-T}
返回(k)
}
图书馆(plyr)
ddply(DF,'Time',summary,Result=VD(X,Y,T))
时间结果
1 1 4
2 2 5
3 3 2
4 4 7
5 5 4
6 6 0
7 7 -3
8 8 2
9 9 3
10 10 0
VD2 ddply(DF,'Time',summary,Result2=VD2(X))
时间结果2
1 1 1
2 2 2
3 3 12
4 4 4
5 5 16
6 6 2
7 7 13
8 8 9
9 9 7
10 10 14
在“一”功能中,另一种可能也起作用:
data2 <- plyr::ddply (DF, "Time", .fun=function(xx){
c(Result=ifelse(xx[,"X"] > 0 & xx[,"Y"] < 0, {k=9-xx[,"T"]},
ifelse(xx[,"X"] < 0 & xx[,"Y"] < 0, {k=5-xx[,"T"]},
ifelse(xx[,"X"] > 0 & xx[,"Y"] > 0, {k=9-xx[,"T"]},
ifelse(xx[,"X"] < 0 & xx[,"Y"] > 0, {k=5-xx[,"T"]}))))
)})
#or
data3 <- plyr::ddply (DF, "Time", .fun=function(xx){
c(Result= if(xx[,"X"] > 0 & xx[,"Y"] < 0) {k=9-xx[,"T"]}
else if(xx[,"X"] < 0 & xx[,"Y"] < 0) {k=5-xx[,"T"]}
else if(xx[,"X"] > 0 & xx[,"Y"] > 0) {k=9-xx[,"T"]}
else if(xx[,"X"] < 0 & xx[,"Y"] > 0) {k=5-xx[,"T"]}
)})
# or
data4 <- plyr::ddply (DF, "Time", .fun=function(df,t="T"){
c(Result=ifelse(with(df, X > 0 & Y < 0), {k=9-df[,t]},
ifelse(with(df, X < 0 & Y < 0), {k=5-df[,t]},
ifelse(with(df, X > 0 & Y > 0), {k=9-df[,t]},
ifelse(with(df, X < 0 & Y > 0), {k=5-df[,t]}))) )
)})
data4
#or
data5 <- plyr::ddply (DF, "Time", .fun=function(df,t="T"){
c(Result= if(with(df, X > 0 & Y < 0)) {k=9-df[,t]}
else if(with(df, X < 0 & Y < 0)) {k=5-df[,t]}
else if(with(df, X > 0 & Y > 0)) {k=9-df[,t]}
else if(with(df, X < 0 & Y > 0)) {k=5-df[,t]}
)})
data5
data2 0&xx[,“Y”]<0,{k=9-xx[,“T”},
如果else(xx[,“X”]<0&xx[,“Y”]<0,{k=5-xx[,“T”},
如果else(xx[,“X”]>0&xx[,“Y”]>0,{k=9-xx[,“T”},
ifelse(xx[,“X”]<0&xx[,“Y”]>0,{k=5-xx[,“T”})))
)})
#或
数据3 0&xx[,“Y”]<0{k=9-xx[,“T”}
如果(xx[,“X”]<0&xx[,“Y”]<0){k=5-xx[,“T”}
如果(xx[,“X”]>0&xx[,“Y”]>0){k=9-xx[,“T”}
如果(xx[,“X”]<0&xx[,“Y”]>0){k=5-xx[,“T”}
)})
#或
数据4 0&Y<0,{k=9-df[,t]},
ifelse(带(df,X<0&Y<0),{k=5-df[,t]},
ifelse(带(df,X>0&Y>0),{k=9-df[,t]},
ifelse(带(df,X<0&Y>0),{k=5-df[,t]})))
)})
数据4
#或
数据5 0&Y<0)){k=9-df[,t]}
else如果(带(df,X<0&Y<0)){k=5-df[,t]}
else if(带(df,X>0&Y>0)){k=9-df[,t]}
else如果(带(df,X<0&Y>0)){k=5-df[,t]}
)})
数据5
在“一”功能中,另一种可能也起作用:
data2 <- plyr::ddply (DF, "Time", .fun=function(xx){
c(Result=ifelse(xx[,"X"] > 0 & xx[,"Y"] < 0, {k=9-xx[,"T"]},
ifelse(xx[,"X"] < 0 & xx[,"Y"] < 0, {k=5-xx[,"T"]},
ifelse(xx[,"X"] > 0 & xx[,"Y"] > 0, {k=9-xx[,"T"]},
ifelse(xx[,"X"] < 0 & xx[,"Y"] > 0, {k=5-xx[,"T"]}))))
)})
#or
data3 <- plyr::ddply (DF, "Time", .fun=function(xx){
c(Result= if(xx[,"X"] > 0 & xx[,"Y"] < 0) {k=9-xx[,"T"]}
else if(xx[,"X"] < 0 & xx[,"Y"] < 0) {k=5-xx[,"T"]}
else if(xx[,"X"] > 0 & xx[,"Y"] > 0) {k=9-xx[,"T"]}
else if(xx[,"X"] < 0 & xx[,"Y"] > 0) {k=5-xx[,"T"]}
)})
# or
data4 <- plyr::ddply (DF, "Time", .fun=function(df,t="T"){
c(Result=ifelse(with(df, X > 0 & Y < 0), {k=9-df[,t]},
ifelse(with(df, X < 0 & Y < 0), {k=5-df[,t]},
ifelse(with(df, X > 0 & Y > 0), {k=9-df[,t]},
ifelse(with(df, X < 0 & Y > 0), {k=5-df[,t]}))) )
)})
data4
#or
data5 <- plyr::ddply (DF, "Time", .fun=function(df,t="T"){
c(Result= if(with(df, X > 0 & Y < 0)) {k=9-df[,t]}
else if(with(df, X < 0 & Y < 0)) {k=5-df[,t]}
else if(with(df, X > 0 & Y > 0)) {k=9-df[,t]}
else if(with(df, X < 0 & Y > 0)) {k=5-df[,t]}
)})
data5
data2 0&xx[,“Y”]<0,{k=9-xx[,“T”},
如果else(xx[,“X”]<0&xx[,“Y”]<0,{k=5-xx[,“T”},
如果else(xx[,“X”]>0&xx[,“Y”]>0,{k=9-xx[,“T”},
ifelse(xx[,“X”]<0&xx[,“Y”]>0,{k=5-xx[,“T”})))
)})
#或
数据3 0&xx[,“Y”]<0{k=9-xx[,“T”}
如果(xx[,“X”]<0&xx[,“Y”]<0){k=5-xx[,“T”}
如果(xx[,“X”]>0&xx[,“Y”]>0){k=9-xx[,“T”}
如果(xx[,“X”]<0&xx[,“Y”]>0){k=5-xx[,“T”}
)})
#或
数据4 0&Y<0,{k=9-df[,t]},
ifelse(带(df,X<0&Y<0),{k=5-df[,t]},
ifelse(带(df,X>0&Y>0),{k=9-df[,t]},
ifelse(带(df,X<0&Y>0),{k=5-df[,t]})))
)})
数据4
#或
数据5 0&Y<0)){k=9-df[,t]}
else如果(带(df,X<0&Y<0)){k=5-df[,t]}
else if(带(df,X>0&Y>0)){k=9-df[,t]}
else如果(带(df,X<0&Y>0)){k=5-df[,t]}
)})
数据5
此外,函数VD2
在X>0
时不返回任何内容,因此在ddply
中尝试使用时会出错。此外,函数VD2
在X>0
时不返回任何内容,因此在ddply
中尝试使用时会出错。
VD<-function(X,Y,T){
if(X > 0 & Y < 0) {k=9-T}
if(X < 0 & Y < 0) {k=5-T}
if(X > 0 & Y > 0) {k=9-T}
if(X < 0 & Y > 0) {k=5-T}
return(k)
}
library(plyr)
ddply(DF,'Time',summarize,Result=VD(X,Y,T))
Time Result
1 1 4
2 2 5
3 3 2
4 4 7
5 5 4
6 6 0
7 7 -3
8 8 2
9 9 3
10 10 0
VD2<-function(X){
if(X<0) {k=9-X}
if(X>0) {k=X}
return(k)
}
> ddply(DF,'Time',summarize,Result2=VD2(X))
Time Result2
1 1 1
2 2 2
3 3 12
4 4 4
5 5 16
6 6 2
7 7 13
8 8 9
9 9 7
10 10 14
data2 <- plyr::ddply (DF, "Time", .fun=function(xx){
c(Result=ifelse(xx[,"X"] > 0 & xx[,"Y"] < 0, {k=9-xx[,"T"]},
ifelse(xx[,"X"] < 0 & xx[,"Y"] < 0, {k=5-xx[,"T"]},
ifelse(xx[,"X"] > 0 & xx[,"Y"] > 0, {k=9-xx[,"T"]},
ifelse(xx[,"X"] < 0 & xx[,"Y"] > 0, {k=5-xx[,"T"]}))))
)})
#or
data3 <- plyr::ddply (DF, "Time", .fun=function(xx){
c(Result= if(xx[,"X"] > 0 & xx[,"Y"] < 0) {k=9-xx[,"T"]}
else if(xx[,"X"] < 0 & xx[,"Y"] < 0) {k=5-xx[,"T"]}
else if(xx[,"X"] > 0 & xx[,"Y"] > 0) {k=9-xx[,"T"]}
else if(xx[,"X"] < 0 & xx[,"Y"] > 0) {k=5-xx[,"T"]}
)})
# or
data4 <- plyr::ddply (DF, "Time", .fun=function(df,t="T"){
c(Result=ifelse(with(df, X > 0 & Y < 0), {k=9-df[,t]},
ifelse(with(df, X < 0 & Y < 0), {k=5-df[,t]},
ifelse(with(df, X > 0 & Y > 0), {k=9-df[,t]},
ifelse(with(df, X < 0 & Y > 0), {k=5-df[,t]}))) )
)})
data4
#or
data5 <- plyr::ddply (DF, "Time", .fun=function(df,t="T"){
c(Result= if(with(df, X > 0 & Y < 0)) {k=9-df[,t]}
else if(with(df, X < 0 & Y < 0)) {k=5-df[,t]}
else if(with(df, X > 0 & Y > 0)) {k=9-df[,t]}
else if(with(df, X < 0 & Y > 0)) {k=5-df[,t]}
)})
data5