我正在尝试使用plyr包中的ddply将函数应用于数据框,但我得到了一些我不理解的结果。我有三个问题关于这些结果。
给定:
我的df长这样:
问题1:
我得到了以下错误:
我无论将要拆分的变量指定为c("x"), "x"还是 .(x),都会出现这个错误。我不明白为什么会出现这个错误信息。
问题 #2
但是,我真正想做的是设置一个if/else函数,因为我的数据集有变量x1、x2、x3和x4,我也想考虑这些变量。但是当我尝试一些简单的东西时,比如:
我得到:
“在列z不正确的情况下。 然而,我看到很多函数被写成function()。”
“我非常感谢任何可以帮助我的评论。”
给定:
mydf<- data.frame(c(12,34,9,3,22,55),c(1,2,1,1,2,2)
, c(0,1,2,1,1,2))
colnames(mydf)[1] <- 'n'
colnames(mydf)[2] <- 'x'
colnames(mydf)[3] <- 'x1'
我的df长这样:
n x x1
1 12 1 0
2 34 2 1
3 9 1 2
4 3 1 1
5 22 2 1
6 55 2 2
问题1:
如果我这样做:
k <- function(x) {
mydf$z <- ifelse(x == 1, 0, mydf$n)
return (mydf)
}
mydf <- ddply(mydf, c("x") , .fun = k, .inform = TRUE)
我得到了以下错误:
Error in `$<-.data.frame`(`*tmp*`, "z", value = structure(c(12, 34, 9, :
replacement has 3 rows, data has 6
Error: with piece 1:
n x x1
1 12 1 0
2 9 1 2
3 3 1 1
我无论将要拆分的变量指定为c("x"), "x"还是 .(x),都会出现这个错误。我不明白为什么会出现这个错误信息。
问题 #2
但是,我真正想做的是设置一个if/else函数,因为我的数据集有变量x1、x2、x3和x4,我也想考虑这些变量。但是当我尝试一些简单的东西时,比如:
j <- function(x) {
if(x == 1){
mydf$z <- 0
} else {
mydf$z <- mydf$n
}
return(mydf)
}
mydf <- ddply(mydf, x, .fun = j, .inform = TRUE)
我得到:
Warning messages:
1: In if (x == 1) { :
the condition has length > 1 and only the first element will be used
2: In if (x == 1) { :
the condition has length > 1 and only the first element will be used
问题 #3
我对于何时使用 function() 以及何时使用 function(x) 感到困惑。无论是在 j() 还是 k() 中使用 function() 都会给我不同的错误:
Error in .fun(piece, ...) : unused argument (piece)
Error: with piece 1:
n x x1 z
1 12 1 0 12
2 9 1 2 9
3 3 1 1 3
4 12 1 0 12
5 9 1 2 9
6 3 1 1 3
7 12 1 0 12
8 9 1 2 9
9 3 1 1 3
10 12 1 0 12
11 9 1 2 9
12 3 1 1 3
“在列z不正确的情况下。 然而,我看到很多函数被写成function()。”
“我非常感谢任何可以帮助我的评论。”