R-根据条件观察结果创建新列并将其应用于主df

时间:2018-10-29 18:36:23

标签: r

我有一个非常大的数据框(大约有1500万个观测值,涉及10个变量)。 df本质上是在各种情况(条件)下一组城市的结果。这是df的简化视图:

char(0x97)

我正在尝试创建一个新列(“基准”),该列与给定城市在2000年的各种情况下的结果相等。由于存在许多情况,因此我很难做到这一点。 / p>

谢谢!

2 个答案:

答案 0 :(得分:0)

因此,您希望在2000年的每一行中对这些条件进行比较?

我要解决的方法是将数据框加入经过过滤的2000年本身。假设您将数据框称为df

require(dplyr)
df_base <- df %>% left_join(
  df %>% 
    filter(Year == 2000) %>% #get just year 2000 results
    select(-Year) %>% #remove year so that it does not join on it
    rename(base = result) #rename the result column of the cut dataframe to base
)

这将与不是年份的所有其他列合并,表示相同的州和城市以及您的所有条件,并返回带有名为“ base”的新列的完整数据框,其中包含state + city +的2000年结果条件。如果您不想加入其他列,则可以在选择中将其删除,也可以使用left_join中的“ by”变量指定所有要明确加入的列。

答案 1 :(得分:0)

考虑使用ave来计算同一多个组中的记录,并让 Result identity()返回。

# YEAR 2000 CALCULATION
df$Base <- with(df, ifelse(Year == 2000,
                           ave(Result, Condition1, Condition2, Condition3, FUN=identity),
                           NA)
               )

# ASSIGN 2000 RESULT TO ALL OTHER YEARS
df$Base <- with(df, ave(Base, Condition1, Condition2, Condition3, FUN=function(x) max(x, na.rm=TRUE)))

不确定在约15毫欧之间的性能。