有条件地加入 DPLYR
Conditional Join with DPLYR
我试图通过一个具有不同名称的变量和源中的单个条件标准(即年份)连接两个数据框。
调查各种解决方案并没有为我提供答案。
数据:
x_6.0_2011 <- data.frame(t = c("1", "2", "3", "7"), value_1 = c("0.9", "0.6", "0.1", "0.8"))
x <- data.frame(year = c("2010", "2011", "2012", "2013"), t.nr = c("1", "1", "2", "7"), value = c("0.2", "0.5", "0.7", "0.3"))
我试过的:
x2011 <- ifelse(x$year == '2011',
left_join(x, x_6.0_2011, by = c('t.nr' = 't')), 0)
--> 生成列表 - 错误的解决方案路径
x20111 <- left_join(x, x_6.0_2011, by = c('t.nr' = 't'), ,year== 2011 )
--> 生成一个 df 但仅替换正确的值并从 x_6.0_2011 中复制余数 - 所以错误的解决方案路径
xx_6.02011 <- left_join(filter(x, year == '2011'), x_6.0_2011, by = c('t.nr' = 't'))
--> 用一行生成 df 但我想保留其他条目不包含任何值
预期结果:
Yr t.nr value value_1
2010 1 0.2 0
2011 1 0.3 0.9
2012 2 0.7 0
2013 7 0.3 0
...或至少在最后一列中的类似值不是我无法推断的值。
最小示例有效,但我的工作项目(217 变量)仍然产生错误:
我一直得到:
错误:data_frames 只能包含一维原子向量和列表
非常感谢任何建议。还是我的尝试过于简单化了?
您可以使用 devel
版本的 data.table
library(data.table)#v1.9.5+
setDT(df1)[df2, on=c('t'='t.nr')][year!=2011, value_1:='0'][]
# t value_1 year value
#1: 1 0 2010 0.2
#2: 1 0.9 2011 0.5
#3: 2 0 2012 0.7
#4: 7 0 2013 0.3
我试图通过一个具有不同名称的变量和源中的单个条件标准(即年份)连接两个数据框。
调查各种解决方案并没有为我提供答案。
数据:
x_6.0_2011 <- data.frame(t = c("1", "2", "3", "7"), value_1 = c("0.9", "0.6", "0.1", "0.8"))
x <- data.frame(year = c("2010", "2011", "2012", "2013"), t.nr = c("1", "1", "2", "7"), value = c("0.2", "0.5", "0.7", "0.3"))
我试过的:
x2011 <- ifelse(x$year == '2011',
left_join(x, x_6.0_2011, by = c('t.nr' = 't')), 0)
--> 生成列表 - 错误的解决方案路径
x20111 <- left_join(x, x_6.0_2011, by = c('t.nr' = 't'), ,year== 2011 )
--> 生成一个 df 但仅替换正确的值并从 x_6.0_2011 中复制余数 - 所以错误的解决方案路径
xx_6.02011 <- left_join(filter(x, year == '2011'), x_6.0_2011, by = c('t.nr' = 't'))
--> 用一行生成 df 但我想保留其他条目不包含任何值
预期结果:
Yr t.nr value value_1
2010 1 0.2 0
2011 1 0.3 0.9
2012 2 0.7 0
2013 7 0.3 0
...或至少在最后一列中的类似值不是我无法推断的值。
最小示例有效,但我的工作项目(217 变量)仍然产生错误:
我一直得到: 错误:data_frames 只能包含一维原子向量和列表
非常感谢任何建议。还是我的尝试过于简单化了?
您可以使用 devel
版本的 data.table
library(data.table)#v1.9.5+
setDT(df1)[df2, on=c('t'='t.nr')][year!=2011, value_1:='0'][]
# t value_1 year value
#1: 1 0 2010 0.2
#2: 1 0.9 2011 0.5
#3: 2 0 2012 0.7
#4: 7 0 2013 0.3