我有一个非常大的数据框(大约有1500万个观测值,涉及10个变量)。 df本质上是在各种情况(条件)下一组城市的结果。这是df的简化视图:
char(0x97)
我正在尝试创建一个新列(“基准”),该列与给定城市在2000年的各种情况下的结果相等。由于存在许多情况,因此我很难做到这一点。 / p>
谢谢!
答案 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毫欧之间的性能。