Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/67.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
对R中数据帧的每一行执行plyr操作_R_Plyr - Fatal编程技术网

对R中数据帧的每一行执行plyr操作

对R中数据帧的每一行执行plyr操作,r,plyr,R,Plyr,我喜欢plyr语法。每当我不得不使用一个*apply()命令时,我就会踢狗,并进行为期3天的狂饮。为了我的狗和我的肝脏,对数据帧的每一行执行ddply操作的简明语法是什么 下面是一个适用于简单情况的示例: x <- rnorm(10) y <- rnorm(10) df <- data.frame(x,y) ddply(df,names(df) ,function(df) max(df$x,df$y)) 我认为我完全是在虐待plyr,我不是说这是plyr中的一个bug,而是说

我喜欢plyr语法。每当我不得不使用一个*apply()命令时,我就会踢狗,并进行为期3天的狂饮。为了我的狗和我的肝脏,对数据帧的每一行执行ddply操作的简明语法是什么

下面是一个适用于简单情况的示例:

x <- rnorm(10)
y <- rnorm(10)
df <- data.frame(x,y)
ddply(df,names(df) ,function(df) max(df$x,df$y))
我认为我完全是在虐待plyr,我不是说这是plyr中的一个bug,而是说我的虐待行为(尽管有肝脏和狗)

简言之,使用ddply对每一行进行操作是否有语法捷径可以替代
apply(X,1,…)

我一直在使用的解决方法是创建一个“键”,为每一行提供一个唯一的值,然后我可以重新连接到它

 x <- rnorm(1000)
 y <- rnorm(1000)
 z <- rnorm(1000)
 myLetters <- sample(letters, 1000, replace=T)
 df <- data.frame(x,y, z, myLetters)
  #make the key
 df$myKey <- 1:nrow(df)
 myOut <- merge(df, ddply(df,"myKey" ,function(df) max(df$x,df$y)))
  #knock out the key
 myOut$myKey <- NULL

x只需将其视为一个数组,并处理每一行:

adply(df, 1, transform, max = max(x, y))

只是一个想法,但是对数据帧进行转置
t(df)
对您有用吗?它“有效”在于它返回转置。但我看不出这是如何让我找到解决方案的。但是请记住,我不是很聪明(我是一名经济学家),所以你可能必须给我解释清楚。你可以跳过合并步骤,使用
ddply(df,“myKey”,transform,max=max(x,y))
有什么理由你不能只做
pmax(df$x,df$y)
?乔纳森,对于这个简单的例子,在没有plyr的情况下,我可能有很多方法可以做到这一点。我总是试着为我的问题做一些非常简单的例子。我的实际应用程序要复杂得多,但是如果我能在这里做一个简单的例子,我就可以把它抽象成更复杂的。不过,谢谢你的推荐。我觉得我有一个可教的时刻。。。但我没有抓住我面前的东西。你能解释一下变换函数的滚动吗?我阅读了adply和transform的文档,但我不了解这种组合是如何工作的。转换是adply在每个页边距上所做的功能吗?变换后调用max?我很困惑。
transform
接受n+1个参数。第一个参数是要转换的数据帧-这就是plyr为您传递的内容。n个参数是表达式,提供了您想要的新列。嘿,这非常有用!我只是绞尽脑汁。谢谢你花时间喂我。简单地说,我认为转换功能内置于**ply函数中。现在我明白了如何使用转换。今天我将在工作代码中使用它!另请参见总结、安排、变异、nulcolwise等,而不是转换。非常有用。是否有方法删除原始列并返回新列(本例中为max)?
 x <- rnorm(1000)
 y <- rnorm(1000)
 z <- rnorm(1000)
 myLetters <- sample(letters, 1000, replace=T)
 df <- data.frame(x,y, z, myLetters)
  #make the key
 df$myKey <- 1:nrow(df)
 myOut <- merge(df, ddply(df,"myKey" ,function(df) max(df$x,df$y)))
  #knock out the key
 myOut$myKey <- NULL
adply(df, 1, transform, max = max(x, y))