我想知道是否有一种更直接的方法来计算某种类型的变量比我通常采取的方法。
下面的示例可能最好地解释了这一点。(水果和水果是否腐烂)。我想在每一行中添加同一类别腐烂水果的百分比。例如,苹果有4个条目,其中2个腐烂,因此apple的每一行都应该读作0.5。目标值(纯粹作为说明)包含在“期望的结果”列中。
我以前通过 * 在fruit变量上使用“ddply”命令(以sum/lenght作为函数),创建一个新的3*2 Dataframe *,使用“merge”命令将这些值链接回旧的 Dataframe 来解决这个问题。
这感觉像是一个迂回的方法,我想知道是否有更好/更快的方法来做这件事!理想的是一个通用的方法,这是很容易调整的,如果一个而不是百分比需要确定是否所有的水果是腐烂的,任何水果是腐烂的,等等等等....
非常感谢你
W型
Fruit Rotten Desired_Outcome_PercRotten
1 Apple 1 0.5
2 Apple 1 0.5
3 Apple 0 0.5
4 Apple 0 0.5
5 Pear 1 0.75
6 Pear 1 0.75
7 Pear 1 0.75
8 Pear 0 0.75
9 Cherry 0 0
10 Cherry 0 0
11 Cherry 0 0
#create example datagram; desired outcome columns are purely inserted as illustrative of target outcomes
Fruit=c(rep("Apple",4),rep("Pear",4),rep("Cherry",3))
Rotten=c(1,1,0,0,1,1,1,0,0,0,0)
Desired_Outcome_PercRotten=c(0.5,0.5,0.5,0.5,0.75,0.75,0.75,0.75,0,0,0)
df=as.data.frame(cbind(Fruit,Rotten,Desired_Outcome_PercRotten))
df
5条答案
按热度按时间t40tm48m1#
只需使用
ddply
和mutate
即可实现此操作:wsxa1bj12#
data.table
是超快的,因为它通过引用更新。使用它怎么样?h79rfbju3#
一个以R为底的解决方案是使用
ave
。或更短:
ave
应用的默认函数是mean
,因此我没有在这里包括它。但是,如果你想做一些不同的事情,你可以通过附加FUN = some-function-here
来指定一个不同的函数。bgibtngc4#
由于
ave
已经存在,让我使用我选择的基R函数添加一个解决方案:aggregate
.您可以通过以下方式获得所需数据:
但是,您需要在之后仍然
merge
它(或在一块):vyu0f0g15#
使用
dplyr
-对于
dplyr
版本1.1.0及更高版本-使用
.by
参数可提供临时分组,并避免使用group_by
和ungroup
语句。对于
dplyr
版本〈1.1.0数据