我有一个data.frame df
,我想创建一个新的变量,它是另一个按组的比例。这是针对每个Species
ID
Plot
Sub
配对,我希望找到Area
到Type
的比例。如果Type
= 0,那么PropArea
== 1,如果Type
不等于0(即1或2),那么,例如PropArea
= {{1 (类型1)/ Area
(类型0)。下面是一个示例data.frame。我知道如何使用excel中的if语句执行此操作,但希望在Area
中找到一种方法来执行此操作。
r
答案 0 :(得分:1)
只要您对使用的data.frame感到满意,这应该可行:
library(plyr)
df2 <- ddply(df_more, .(Species, ID, Plot, Sub), function(groupdf) {
denominator <- groupdf[groupdf$Type==0,"Area"]
if(length(denominator) == 0) denominator <- groupdf[groupdf$Type==1,"Area"]
transform(groupdf, PropArea=Area/denominator)
})
如果您想保持相同的顺序,请添加以下行:
df1 <- df2[match(
interaction(df[c("Species", "ID", "Plot", "Sub", "Type")]),
interaction(df2[c("Species", "ID", "Plot", "Sub", "Type")])),]
答案 1 :(得分:0)
如果您可以保证在您的示例中将0
与1
和2
交替使用,则可以使用ifelse
:
df$PropArea <- ifelse(df$Type == 0, 1, df$Area / c(1, df$Area[-nrow(df)]))
答案 2 :(得分:0)
df_more数据集中有重复项。 例如。 DIVI / 22/1/2/0的面积分别为7.50和7.42。 这将导致错误。